Nó có thể là giải pháp tốt nhất. Trước tiên, hãy xem một số câu trả lời khác ...
EXPLAIN SELECT ...
có tác dụng gì Nói? (Điều này có thể trả lời cho quý 2 của bạn).
Truy vấn của bạn sẽ quét toàn bộ bảng, bất kể các câu trả lời khác. Có lẽ bạn muốn LIMIT ...
cuối cùng?
Một điều khác có thể hữu ích (tùy thuộc vào ứng dụng của bạn và trên Trình tối ưu hóa):Thêm hộp giới hạn vào WHERE
mệnh đề.
Trong mọi trường hợp, hãy làm như sau để có cảm nhận chính xác về số lượng hàng thực sự được chạm vào:
FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';
Lấy lại những câu trả lời đó; thì có lẽ chúng ta có thể lặp lại xa hơn.
Sau khi HIỂN THỊ TÌNH TRẠNG
Chà, Handler_read_rnd_next
nói rằng đó là một bản quét toàn bộ bảng. 1000 và 1001 - bạn có LIMIT 1000
không ?
Tôi suy ra rằng LIMIT
không được tính vào cách SPATIAL
làm. Đó là, nó thực hiện điều đơn giản - (1) kiểm tra tất cả các hàng, (2) sắp xếp, (3) LIMIT
.
Vì vậy, phải làm gì?
Kế hoạch A:Quyết định rằng bạn không muốn kết quả xa hơn X dặm (km) và thêm "hộp giới hạn" vào truy vấn.
Kế hoạch B:Bỏ Spatial và tìm cách phức tạp hơn để thực hiện nhiệm vụ: http:// mysql.rjweb.org/doc.php/latlng