B-Tree
Indizes werden bei einer solchen Abfrage nicht viel helfen.
Was Sie als R-Tree
brauchen index und die minimale begrenzende Parallelepiped-Abfrage darüber.
Leider MySQL
unterstützt R-Tree
nicht Indizes über 3d
Punkte, nur 2d
. Sie können jedoch einen Index über beispielsweise X
erstellen und Y
zusammen, die selektiver sind als jeder der B-Tree
Indizes auf X
und Y
allein:
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;
Dies ist nur möglich, wenn Ihre Tabelle MyISAM
ist .