Mengoptimumkan Pertanyaan MySQL untuk Baris Tidak Hadir dalam Jadual Lain
Apabila bekerja dengan berbilang jadual, selalunya perlu mendapatkan semula rekod yang ada dalam satu jadual tetapi tidak dalam yang lain. Dalam konteks MySQL, terdapat dua pendekatan biasa untuk menangani senario ini: subkueri NOT EXISTS dan LEFT JOIN diikuti dengan semakan IS NULL.
Pendekatan subkueri NOT EXISTS, seperti yang ditunjukkan dalam contoh yang disediakan, melibatkan pemeriksaan sama ada rekod dalam jadual A tidak wujud dalam jadual B berdasarkan kunci primer yang sepadan. Walaupun kaedah ini berfungsi, kaedah ini boleh menjadi tidak cekap, terutamanya untuk set data yang besar, kerana ia memerlukan berbilang carian pangkalan data untuk setiap rekod.
Untuk meningkatkan prestasi, pertimbangkan untuk menggunakan LEFT JOIN sebaliknya, seperti yang dicadangkan dalam soalan. Pendekatan ini mengembalikan semua rekod daripada jadual A, termasuk yang mempunyai rekod yang sepadan dalam jadual B dan yang tidak. Anda kemudiannya boleh menapis rekod yang tidak mempunyai rekod yang sepadan dengan menyemak sama ada lajur yang sepadan daripada jadual B ialah NULL.
Pertanyaan dioptimumkan berikut menunjukkan pendekatan ini:
<code class="sql">SELECT A.* FROM A LEFT JOIN B ON A.x = B.y WHERE B.y IS NULL;</code>
Pertanyaan ini harus berprestasi jauh lebih pantas daripada pendekatan subkueri NOT EXISTS, terutamanya untuk set data yang besar, kerana ia mengelakkan keperluan untuk carian pangkalan data berbilang. Ia hanya mengembalikan rekod yang unik kepada jadual A dengan cekap.
Secara amnya, pendekatan LEFT JOIN lebih diutamakan untuk jenis pertanyaan ini kerana ia lebih cekap dan berskala. Walau bagaimanapun, adalah penting untuk mempertimbangkan ciri khusus set data dan keperluan prestasi anda untuk menentukan penyelesaian yang paling sesuai.
Atas ialah kandungan terperinci Mana Yang Lebih Cekap: TIDAK WUJUD Subkueri atau LEFT JOIN untuk Mencari Baris Tidak Hadir dalam Jadual Lain?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!