Optimumkan pertanyaan spatial: cekap mencari semua bangunan dalam jarak 5 batu
Artikel ini meneroka masalah spatial biasa: mendapatkan semula semua bangunan dalam radius tertentu dari titik koordinat tertentu. Menggunakan fungsi ST_CONTAINS
secara langsung mungkin tidak cekap, jadi artikel ini akan meneroka penyelesaian yang lebih baik.
Kepentingan perwakilan data
Sebelum pergi ke butiran teknikal, adalah penting untuk menekankan kepentingan perwakilan data yang betul. Menyimpan data geospatial sebagai lajur longitud dan latitud yang berasingan mewujudkan ketidakcekapan dalam operasi pertanyaan. Untuk tujuan ini, adalah sangat disyorkan untuk menggunakan jenis data geometry
atau geography
, yang merangkumi dua koordinat dalam satu medan.
Gunakan ST_DWithin untuk melaksanakan pertanyaan kedekatan dengan cekap
ST_DWithin
ialah fungsi berkuasa yang secara langsung menyemak sama ada dua geometri berada dalam jarak tertentu. Dengan menukar jejari carian kepada meter dan membandingkannya dengan jarak yang dikira menggunakan ST_DWithin
, kami boleh mengenal pasti bangunan dalam julat yang dikehendaki dengan cekap.
<code class="language-sql">SELECT name, long, lat FROM building WHERE ST_DWithin( ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'), ST_POINT(long, lat), 8046.72 ); -- 8046.72 米 = 5 英里</code>
Gunakan ST_Distance untuk mengendalikan jarak batu yang ditukar
Sebagai alternatif, anda boleh menggunakan ST_Distance
untuk mengira jarak antara bentuk geometri. Keluaran pada mulanya adalah dalam meter, tetapi kita boleh menukarnya kepada batu menggunakan faktor pendaraban mudah:
<code class="language-sql">SELECT name, long, lat, ST_Distance( ST_GEOMETRY_FROM_TEXT('POINT(-84.38653999999998,33.72024)'), ST_POINT(long, lat) ) * 0.000621371 AS distance FROM building WHERE distance < 5;</code>
Nota: Apabila menggunakan ST_Distance
, pertanyaan spatial mesti dikendalikan dengan cekap dengan menggunakan indeks. Walaupun ST_Distance
sendiri tidak menyokong pengindeksan, mencipta indeks spatial pada ST_GEOMETRY
boleh mengoptimumkan prestasi pertanyaan keseluruhan.
Ringkasan
Dengan meneroka pendekatan alternatif dan menekankan pengoptimuman perwakilan data, kami menunjukkan kaedah untuk mendapatkan semula bangunan dengan cekap dalam julat tertentu. Teknik yang dibentangkan dalam kertas kerja ini memberikan skalabiliti dan peningkatan prestasi untuk pertanyaan spatial dalam aplikasi dunia sebenar.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mencari Semua Bangunan Dengan Cekap Dalam 5 Batu dari Titik Tertentu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!