Mengambil semula Alamat IP yang Hilang dalam PostgreSQL
Panduan ini menunjukkan beberapa kaedah untuk mengenal pasti alamat IP yang terdapat dalam jadual login_log
tetapi tiada daripada jadual ip_location
dalam pangkalan data PostgreSQL.
Kaedah 1: NOT EXISTS
Secara amnya dianggap sebagai pendekatan paling cekap dalam PostgreSQL:
<code class="language-sql">SELECT ip FROM login_log l WHERE NOT EXISTS ( SELECT 1 -- A simple SELECT is sufficient here FROM ip_location WHERE ip = l.ip );</code>
Kaedah 2: LEFT JOIN
/IS NULL
Alternatif yang ringkas dan selalunya cekap:
<code class="language-sql">SELECT l.ip FROM login_log l LEFT JOIN ip_location i USING (ip) -- Equivalent to ON i.ip = l.ip WHERE i.ip IS NULL;</code>
Kaedah 3: EXCEPT
Kaedah padat, tetapi kurang fleksibel untuk pertanyaan kompleks:
<code class="language-sql">SELECT ip FROM login_log EXCEPT ALL -- `ALL` preserves duplicates, potentially improving speed SELECT ip FROM ip_location;</code>
Kaedah 4: NOT IN
Gunakan dengan berhati-hati kerana kemungkinan isu dengan nilai NULL
:
<code class="language-sql">SELECT ip FROM login_log WHERE ip NOT IN ( SELECT DISTINCT ip -- `DISTINCT` is optional FROM ip_location );</code>
Pengoptimuman Prestasi
Prestasi pertanyaan berbeza-beza bergantung pada volum data dan pengindeksan jadual. NOT EXISTS
, LEFT JOIN
dan EXCEPT
biasanya menawarkan prestasi unggul. Pastikan indeks yang sesuai diletakkan pada lajur ip
kedua-dua jadual untuk hasil yang optimum.
Atas ialah kandungan terperinci Bagaimana untuk Memilih Baris dengan Cekap dari Satu Jadual Tidak Hadir dalam Satu Lagi dalam PostgreSQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!