Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mencari Alamat IP dengan Cekap dalam Satu Jadual yang Hilang dalam Jadual Lain?
Mengenal pasti Alamat IP Hilang Merentas Dua Jadual
Panduan ini menunjukkan cara mencari alamat IP dengan cekap dalam jadual PostgreSQL login_log
yang tiada daripada jadual ip_location
, kedua-duanya berkongsi lajur ip
.
Strategi Pertanyaan Optimum
Beberapa pendekatan SQL boleh mencapai ini, setiap satu dengan ciri prestasi yang berbeza-beza:
1. NOT EXISTS
Subkueri: Penyelesaian Berprestasi Tinggi
Secara amnya kaedah terpantas dalam PostgreSQL:
<code class="language-sql">SELECT ip FROM login_log l WHERE NOT EXISTS ( SELECT 1 -- Selecting 1 is more efficient than selecting ip FROM ip_location WHERE ip = l.ip );</code>
2. LEFT JOIN
/ IS NULL
: Alternatif yang Cekap
Pesaing kuat untuk kecekapan:
<code class="language-sql">SELECT l.ip FROM login_log l LEFT JOIN ip_location i USING (ip) WHERE i.ip IS NULL;</code>
3. EXCEPT
: Ringkas tetapi Kurang Fleksibel
Walaupun ringkas, pendekatan ini kurang boleh disesuaikan dalam pertanyaan kompleks:
<code class="language-sql">SELECT ip FROM login_log EXCEPT ALL SELECT ip FROM ip_location;</code>
4. NOT IN
: Kurang Cekap dan Memerlukan Berhati-hati
Elakkan kaedah ini jika boleh, terutamanya dengan nilai NULL
yang berpotensi dalam lajur ip
. Ia kurang cekap dan memerlukan pengendalian null yang teliti untuk mengelakkan hasil yang tidak dijangka.
<code class="language-sql">SELECT ip FROM login_log WHERE ip NOT IN ( SELECT DISTINCT ip FROM ip_location );</code>
Pilih kaedah yang paling sesuai dengan keperluan kerumitan dan prestasi pertanyaan anda. Untuk senario mudah, NOT EXISTS
atau LEFT JOIN
disyorkan untuk prestasi optimum dalam PostgreSQL.
Atas ialah kandungan terperinci Bagaimana untuk Mencari Alamat IP dengan Cekap dalam Satu Jadual yang Hilang dalam Jadual Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!