Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Basis data:Cara kinerja terbaik untuk menanyakan data lokasi geografis?

Ada makalah bagus tentang kinerja geolokasi MySQL di sini .

EDIT Cukup yakin ini menggunakan radius tetap. Saya juga tidak 100% yakin bahwa algoritme untuk menghitung jarak adalah yang paling canggih (yaitu akan "mengebor" melalui Bumi).

Yang penting adalah bahwa algoritme itu murah untuk memberi Anda batas parkir bola pada jumlah baris untuk melakukan pencarian jarak yang tepat.

Algoritme memfilter dengan mengambil kandidat dalam kotak di sekitar titik sumber, lalu menghitung jarak dalam mil .

Hitung sebelumnya, atau gunakan prosedur tersimpan seperti yang disarankan oleh sumbernya:

# 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. Bagaimana cara melakukan polling basis data waktu nyata di MySQL/PHP?

  2. Cara mereset kata sandi root MySQL

  3. Hive Table mengembalikan hasil kosong yang disetel pada semua kueri

  4. Cara menggunakan wildcard awalan seperti '*abc' dengan pertandingan-melawan

  5. Urutan Operasi MySQL?