Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Tìm địa điểm gần nhất bằng cách sử dụng loại dữ liệu điểm và st_distance_sphere trong MySQL 8

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xem các tệp PDF được lưu trữ trong cơ sở dữ liệu MySQL bằng lỗi PHP

  2. MySQL - Chọn trường có bao nhiêu Ngày tuổi

  3. Cách kết nối Google Cloud SQL với C #

  4. MySQL - tự động bổ sung thành phần hướng dẫn

  5. Tham gia vào cùng một bàn nhiều hơn một lần