B-Tree
индексите няма да помогнат много за такава заявка.
Какво ви трябва като R-Tree
индекс и минималната ограничаваща заявка на паралелепипед над него.
За съжаление, MySQL
не поддържа R-Tree
индексира над 3d
точки, само 2d
. Въпреки това, можете да създадете индекс над, да речем, X
и Y
заедно, което ще бъде по-селективно от което и да е от B-Tree
индексира на X
и Y
сам:
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;
Това е възможно само ако вашата таблица е MyISAM
.