B-Tree
index hjälper inte mycket för en sådan fråga.
Vad du behöver som ett R-Tree
index och den minimala gränsande parallellepipedfrågan över den.
Tyvärr, MySQL
stöder inte R-Tree
indexerar över 3d
poäng, endast 2d
. Du kan dock skapa ett index över, säg, X
och Y
tillsammans vilket kommer att vara mer selektivt än något av B-Tree
indexerar på X
och Y
ensam:
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;
Detta är bara möjligt om din tabell är MyISAM
.