Rumah > pangkalan data > tutorial mysql > WHERE vs. ON Klausa dalam SOALAN JOIN: Bilakah Saya Harus Menggunakan Mana untuk Prestasi Optimum?

WHERE vs. ON Klausa dalam SOALAN JOIN: Bilakah Saya Harus Menggunakan Mana untuk Prestasi Optimum?

Mary-Kate Olsen
Lepaskan: 2025-01-04 09:58:35
asal
137 orang telah melayarinya

WHERE vs. ON Clause in JOIN Queries: When Should I Use Which for Optimal Performance?

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;
Salin selepas log masuk

Berbanding dengan:

SELECT *
FROM Foo f
INNER JOIN Bar b ON (b.IsApproved = 1) AND (b.BarId = f.BarId);
Salin selepas log masuk

Kedua-dua pertanyaan mengembalikan set baris yang sama, tetapi ciri prestasi berbeza.

Secara amnya, meletakkan penapis dalam klausa ON lebih disukai atas sebab berikut:

  • Mengoptimumkan operasi gabungan: Klausa ON dinilai sebelum sebarang baris digabungkan, membenarkan pangkalan data untuk secara selektif menyertai hanya baris yang memenuhi kriteria yang ditentukan. Ini menghasilkan proses gabungan yang lebih cekap.
  • Meminimumkan saiz set hasil: Dengan menapis dalam klausa ON, anda mengurangkan bilangan baris yang tertakluk kepada penilaian klausa WHERE, yang membawa kepada set hasil yang berpotensi lebih kecil.

Walau bagaimanapun, terdapat kes di mana meletakkan penapis dalam klausa WHERE adalah perlu:

  • Sambungan luar: Cantuman luar termasuk baris dari jadual kiri walaupun tiada baris yang sepadan dalam jadual kanan. Meletakkan penapis dalam klausa WHERE membolehkan anda menapis set hasil selepas gabungan berlaku.
  • Penapisan PILIHAN: Penapis PILIHAN membenarkan baris dikembalikan walaupun syarat cantum tidak dipenuhi. Sebagai contoh, pertanyaan berikut memerlukan b.IsApproved menjadi NULL atau 1:
SELECT *
FROM Foo f
LEFT OUTER JOIN Bar b ON (b.BarId = f.BarId)
WHERE (b.IsApproved IS NULL OR b.IsApproved = 1);
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan