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
の場合にのみ可能です。 。