B-Tree
indexy pro takový dotaz příliš nepomohou.
Co potřebujete jako R-Tree
index a nad ním minimální ohraničující rovnoběžnostěnový dotaz.
Bohužel MySQL
nepodporuje R-Tree
indexy přes 3d
bodů, pouze 2d
. Můžete však vytvořit index přes, řekněme, X
a Y
společně, což bude selektivnější než kterýkoli z B-Tree
indexy na X
a Y
sám:
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;
To je možné pouze v případě, že je vaše tabulka MyISAM
.