我有一个大型数据集(大约 190 万行),其中包含我要从中选择的 3D 点。我最常使用的语句类似于:
SELECT * FROM points
WHERE x > 100 AND x < 200
AND y > 100 AND y < 200
AND z > 100 AND z < 200
AND otherParameter > 10
我有关于 x、y 和 z 以及其他参数的指标。我也尝试过向 x、y、z 添加多部分索引,但这没有帮助。
关于如何使此 SELECT
查询更快的任何建议?
最佳答案
B-Tree
索引对此类查询帮助不大。
R-Tree
索引和对其的最小边界平行六面体查询需要什么。
不幸的是,MySQL
不支持 R-Tree
3d
点的索引,仅支持 2d
。但是,您可以同时创建一个索引,例如 X
和 Y
,这将比任何 B-Tree
索引更具选择性X
和 Y
单独:
ALTER TABLE points ADD xy POINT;
UPDATE points
SET xy = Point(x, y);
ALTER TABLE points MODIFY xy POINT NOT NULL;
CREATE SPATIAL INDEX sx_points_xy ON points (xy);
SELECT *
FROM points
WHERE MBRContains(LineString(Point(100, 100), Point(200, 200), xy)
AND z BETWEEN 100 and 200
AND otherParameter > 10;
这只有在您的表是 MyISAM
时才有可能。
关于mysql - 使用大型 3D 点数据集提高 SELECT 查询的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4974299/