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

Menemukan tempat terdekat menggunakan tipe data titik dan st_distance_sphere di MySQL 8

Itu mungkin menjadi solusi terbaik. Ayo cari jawaban lain dulu...

Apa yang EXPLAIN SELECT ... mengatakan? (Ini mungkin menjawab Q2) Anda.

Kueri Anda akan memindai seluruh tabel, terlepas dari jawaban lainnya. Mungkin Anda ingin LIMIT ... di akhir?

Hal lain yang mungkin berguna (bergantung pada aplikasi Anda dan pada Pengoptimal):Tambahkan kotak pembatas ke WHERE klausa.

Bagaimanapun, lakukan hal berikut untuk mendapatkan gambaran akurat tentang berapa banyak baris yang benar-benar disentuh:

FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';

Dapatkan kembali dengan jawaban-jawaban itu; maka mungkin kita bisa mengulanginya lebih jauh.

Setelah TAMPILKAN STATUS

Nah, Handler_read_rnd_next mengatakan bahwa itu adalah pemindaian tabel penuh. 1000 dan 1001 -- apakah Anda memiliki LIMIT 1000 ?

Saya menyimpulkan bahwa LIMIT tidak diperhitungkan dalam bagaimana SPATIAL bekerja. Artinya, ia melakukan hal yang sederhana -- (1) centang semua baris, (2) sortir, (3) LIMIT .

Jadi, apa yang harus dilakukan?

Rencana A:Putuskan bahwa Anda tidak ingin hasil lebih jauh dari X mil (km) dan tambahkan "kotak pembatas" ke kueri.

Rencana B:Abaikan Spasial dan gali cara yang lebih kompleks untuk melakukan tugas: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. php:sesi vs. database

  2. Bagaimana cara menyimpan nomor telepon di database MySQL?

  3. Laporan MySQL Workbench tidak valid pada posisi ini untuk kesalahan versi server ini

  4. MySQL TIDAK DI Query jauh lebih lambat setelah Mysql Upgrade

  5. DAPATKAN data hierarkis di MySQL