Dalam SQL, memilih baris yang wujud dalam satu jadual tetapi tidak dalam jadual lain boleh dicapai menggunakan "NOT IN" pengendali. Walau bagaimanapun, pendekatan ini kadangkala boleh membawa kepada isu prestasi untuk set data yang besar.
Pertimbangkan senario di mana anda mempunyai dua jadual, A dan B, dengan kunci utama yang sama. Untuk memilih semua baris daripada A yang tidak terdapat dalam B, anda boleh menggunakan pertanyaan berikut:
<code class="sql">SELECT * FROM A WHERE NOT EXISTS ( SELECT * FROM B WHERE A.pk = B.pk );</code>
Semasa pertanyaan ini berfungsi, ia boleh menjadi tidak cekap, terutamanya untuk jadual besar. Pangkalan data mesti melakukan pertanyaan bersarang untuk setiap baris dalam A, menyemak kehadirannya dalam B.
Pendekatan yang lebih baik ialah menggunakan gabungan kiri dan menapis hasil berdasarkan nilai nol. Kaedah ini melibatkan penggabungan A dan B pada lajur biasa dan kemudian memilih baris daripada A dengan lajur yang sepadan dalam B adalah batal:
<code class="sql">SELECT A.* FROM A LEFT JOIN B ON A.x = B.y WHERE B.y IS NULL;</code>
Pertanyaan ini melakukan operasi gabungan tunggal dan menapis keputusan berdasarkan ketiadaan daripada nilai dalam B. Ia biasanya lebih pantas daripada pendekatan "TIDAK MASUK" untuk set data yang besar.
Sebagai alternatif, anda boleh menggunakan subkueri dalam klausa WHERE:
<code class="sql">SELECT A.* FROM A WHERE x NOT IN ( SELECT y FROM B );</code>
Pendekatan ini juga boleh memberikan prestasi yang baik untuk set data yang besar.
Akhirnya, kaedah terbaik untuk mengoptimumkan pertanyaan bergantung pada data tertentu dan konfigurasi pangkalan data. Adalah disyorkan untuk menguji pendekatan yang berbeza dan memilih pendekatan yang memberikan prestasi optimum untuk pertanyaan anda.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memilih Baris dengan Cekap daripada Satu Jadual yang Tidak Wujud dalam Jadual Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!