Rumah >pangkalan data >tutorial mysql >WHERE vs. ON Klausa dalam SOALAN JOIN: Bilakah Saya Harus Menggunakan Mana untuk Prestasi Optimum?
WHERE Klausa lwn HIDUP dalam Pertanyaan JOIN: Implikasi Prestasi
Apabila menggunakan pertanyaan JOIN dalam T-SQL, adalah perkara biasa untuk menghadapi pilihan antara meletakkan syarat penapisan dalam klausa WHERE atau klausa ON. Walaupun kedua-dua pendekatan boleh menghasilkan set hasil yang sama, terdapat perbezaan prestasi yang halus untuk dipertimbangkan.
Secara khusus, mari kita periksa pertanyaan berikut:
SELECT * FROM Foo f INNER JOIN Bar b ON (b.BarId = f.BarId); WHERE b.IsApproved = 1;
Berbanding dengan:
SELECT * FROM Foo f INNER JOIN Bar b ON (b.IsApproved = 1) AND (b.BarId = f.BarId);
Kedua-dua pertanyaan mengembalikan set baris yang sama, tetapi ciri prestasi berbeza.
Secara amnya, meletakkan penapis dalam klausa ON lebih disukai atas sebab berikut:
Walau bagaimanapun, terdapat kes di mana meletakkan penapis dalam klausa WHERE adalah perlu:
SELECT * FROM Foo f LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId) WHERE (b.IsApproved IS NULL OR b.IsApproved = 1);
Kesimpulan:
Apabila prestasi menjadi kebimbangan, pertimbangkan untuk meletakkan syarat penapisan dalam klausa ON untuk mengoptimumkan operasi gabungan dan mengurangkan saiz set hasil. Untuk sambungan luar atau penapisan PILIHAN, klausa WHERE mesti digunakan untuk mencapai penapisan yang diingini.
Atas ialah kandungan terperinci WHERE vs. ON Klausa dalam SOALAN JOIN: Bilakah Saya Harus Menggunakan Mana untuk Prestasi Optimum?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!