B-Tree
gli indici non saranno di grande aiuto per una query del genere.
Cosa ti serve come R-Tree
index e la query parallelepipeda di delimitazione minima su di esso.
Sfortunatamente, MySQL
non supporta R-Tree
indici su 3d
punti, solo 2d
. Tuttavia, puoi creare un indice su, diciamo, X
e Y
insieme che saranno più selettivi di qualsiasi B-Tree
indici su X
e Y
da solo:
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;
Questo è possibile solo se la tua tabella è MyISAM
.