B-Tree
indexen zullen niet veel helpen voor zo'n zoekopdracht.
Wat heb je nodig als R-Tree
index en de minimale begrenzende parallellepipedum-query erover.
Helaas, MySQL
ondersteunt R-Tree
niet indexen over 3d
punten, alleen 2d
. U kunt echter een index maken over bijvoorbeeld X
en Y
samen die selectiever zullen zijn dan een van de B-Tree
indexen op X
en Y
alleen:
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;
Dit is alleen mogelijk als uw tafel MyISAM
is .