B-Tree
chỉ mục sẽ không giúp ích nhiều cho một truy vấn như vậy.
Những gì bạn cần làm R-Tree
chỉ mục và truy vấn song song có giới hạn tối thiểu trên nó.
Thật không may, MySQL
không hỗ trợ R-Tree
lập chỉ mục trên 3d
điểm, chỉ 2d
. Tuy nhiên, bạn có thể tạo chỉ mục trên X
và Y
cùng nhau sẽ được chọn lọc hơn bất kỳ B-Tree
nào lập chỉ mục trên X
và Y
một mình:
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;
Điều này chỉ có thể thực hiện được nếu bảng của bạn là MyISAM
.