B-Tree
indeks tidak akan banyak membantu untuk kueri semacam itu.
Apa yang Anda butuhkan sebagai R-Tree
indeks dan kueri paralelepiped pembatas minimal di atasnya.
Sayangnya, MySQL
tidak mendukung R-Tree
indeks di atas 3d
poin, hanya 2d
. Namun, Anda dapat membuat indeks di atas, katakanlah, X
dan Y
bersama-sama yang akan lebih selektif daripada B-Tree
indeks pada X
dan Y
sendirian:
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;
Ini hanya mungkin jika tabel Anda MyISAM
.