Mengoptimumkan Pertanyaan Spatial dalam MySQL untuk Mencari Titik Dalam Jejari
Pendekatan semasa untuk mencari titik dalam jejari, seperti yang ditunjukkan oleh pertanyaan yang disediakan, sering menghadapi cabaran prestasi dengan set data yang besar. Untuk meningkatkan kecekapan pertanyaan, adalah penting untuk memanfaatkan sambungan geospatial MySQL.
Indeks Ruang dan Fungsi ST_Distance
Daripada menggunakan pengiraan yang rumit, buat indeks spatial pada latitud dan lajur longitud menggunakan arahan SPATIAL INDEX. Ini membolehkan MySQL melakukan pertanyaan spatial dengan cekap dengan merujuk indeks dan bukannya mencari seluruh jadual.
Gunakan fungsi ST_Distance dengan indeks spatial untuk mengira jarak antara titik dan lokasi rujukan yang diberikan. Fungsi ini mengembalikan jarak sebagai apungan, yang kemudiannya boleh anda gunakan sebagai perbandingan.
Sebagai contoh, untuk mencari perhentian dalam radius 5 batu dari titik tertentu, anda boleh mengubah suai pertanyaan seperti berikut:
SELECT *, ST_Distance(POINT(latitude, longitude), POINT(49.1044302, -122.801094)) AS distance FROM stops WHERE distance < 8046.72 ORDER BY distance LIMIT 100
ST_Mengandungi dan ST_Within Fungsi
Dalam kes di mana anda perlu menentukan sama ada titik berada dalam kawasan pekeliling yang ditentukan, pertimbangkan untuk menggunakan fungsi ST_Contains atau ST_Within. Fungsi ini mengambil geometri sebagai hujah dan mengembalikan boolean yang menunjukkan jika titik itu terkandung dalam atau bersilang dengan geometri.
Sebagai contoh, untuk mencari hentian yang bersilang dengan bulatan dengan jejari 5 batu, anda boleh gunakan:
SELECT * FROM stops WHERE ST_Contains(ST_MakePoint(49.1044302, -122.801094), radius_circle(POINT(latitude, longitude), 8046.72))
Fungsi ST_DWithin (Belum selesai Pelaksanaan)
Perhatikan bahawa MySQL tidak melaksanakan fungsi ST_DWithin pada masa ini, yang dioptimumkan untuk mencari titik dalam ambang jarak tertentu. Jika fungsi ini tersedia, ia boleh meningkatkan lagi kecekapan pertanyaan spatial.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengoptimumkan Pertanyaan Spatial MySQL untuk Mencari Mata Secara Cekap dalam Jejari?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!