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

Cơ sở dữ liệu:Cách hiệu quả nhất để truy vấn dữ liệu vị trí địa lý?

Có một bài báo tốt về hiệu suất vị trí địa lý của MySQL tại đây .

CHỈNH SỬA Khá chắc chắn rằng điều này đang sử dụng bán kính cố định. Ngoài ra, tôi không chắc chắn 100% rằng thuật toán tính khoảng cách là tiên tiến nhất (tức là nó sẽ "khoan" xuyên qua Trái đất).

Điều quan trọng là thuật toán rất rẻ để cung cấp cho bạn giới hạn công viên bóng về số hàng để thực hiện tìm kiếm khoảng cách thích hợp.

Thuật toán lọc trước bằng cách lấy các ứng cử viên trong một hình vuông xung quanh điểm nguồn, sau đó tính khoảng cách bằng dặm .

Tính toán trước điều này hoặc sử dụng quy trình được lưu trữ như nguồn gợi ý:

# Pseudo code
# user_lon and user_lat are the source longitude and latitude
# radius is the radius where you want to search
lon_distance = radius / abs(cos(radians(user_lat))*69);
min_lon = user_lon - lon_distance;
max_lon = user_lon + lon_distance;
min_lat = user_lat - (radius / 69);
max_lat = user_lat + (radius / 69);
SELECT dest.*,
  3956 * 2 * ASIN(
    SQRT(
      POWER(
        SIN(
          (user_lat - dest.lat) * pi() / 180 / 2
        ), 2
      ) + COS(
        user_lat * pi() / 180
      ) * COS(
        dest.lat * pi() / 180
      ) * POWER(
        SIN(
          (user_lon - dest.lon) * pi() / 180 / 2
        ), 2
      )
    )
  ) as distance
FROM dest
WHERE 
  dest.lon between min_lon and max_lon AND
  dest.lat between min_lat and max_lat
HAVING distance < radius
ORDER BY distance
LIMIT 10


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Lỗi cú pháp PHP PDO hoặc vi phạm quyền truy cập:1064 khi chèn

  2. Lỗi:không thể initailize cấu trúc thông tin chính trong khi thực hiện Master Slave Replication trong MySQL

  3. Khoảng trống trong tên cột với MySQL

  4. Cố gắng xây dựng một lớp cơ sở dữ liệu tĩnh mà tôi có thể truy cập từ bất kỳ hàm nào bên ngoài lớp

  5. Khung thực thể với MySQL - Đã hết thời gian chờ khi tạo mô hình