B-Tree
indekser hjælper ikke meget for sådan en forespørgsel.
Hvad du skal bruge som et R-Tree
indeks og den minimale afgrænsende parallelepipedum-forespørgsel over det.
Desværre, MySQL
understøtter ikke R-Tree
indekserer over 3d
point, kun 2d
. Du kan dog oprette et indeks over f.eks. X
og Y
sammen, hvilket vil være mere selektivt end nogen af B-Tree
indekserer på X
og Y
alene:
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;
Dette er kun muligt, hvis din tabel er MyISAM
.