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