B-Tree
les index n'aideront pas beaucoup pour une telle requête.
Ce dont vous avez besoin en tant que R-Tree
index et la requête parallélépipède de délimitation minimale dessus.
Malheureusement, MySQL
ne prend pas en charge R-Tree
indexe sur 3d
points, seulement 2d
. Cependant, vous pouvez créer un index sur, disons, X
et Y
ensemble qui sera plus sélectif que n'importe lequel des B-Tree
indexe sur X
et Y
seul :
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;
Ceci n'est possible que si votre table est MyISAM
.