SERTAI KIRI lwn. SERTAI DALAM: Paradoks Prestasi
Adalah andaian biasa bahawa operasi INNER JOIN
lebih cekap daripada LEFT JOIN
dalam SQL Server. Walau bagaimanapun, prestasi boleh menghairankan berlawanan intuitif. Artikel ini meneroka senario di mana LEFT JOIN
mengatasi prestasi INNER JOIN
dengan ketara.
Kajian Kes:
Pertanyaan kompleks yang melibatkan sembilan jadual, pada mulanya menggunakan INNER JOIN
, mempamerkan prestasi yang lemah. Bertukar kepada LEFT JOIN
kelajuan pelaksanaan yang dipertingkatkan secara mendadak.
Mengapa Peningkatan Kelajuan Tidak Dijangka?
Kebijaksanaan konvensional berlaku: LEFT JOIN
secara amnya tidak lebih pantas. Ia melibatkan pemprosesan INNER JOIN
yang sama, ditambah dengan langkah tambahan untuk menambah nilai nol untuk baris yang tidak sepadan dari jadual kiri. Set hasil yang lebih besar juga boleh melambatkan keadaan.
Kunci untuk memahami perbezaan prestasi yang diperhatikan terletak pada ketiadaan indeks kunci utama dan asing pada jadual yang terlibat. Kekurangan pengindeksan ini sangat menjejaskan kecekapan INNER JOIN
.
Situasi Di mana KIRI JOIN Mungkin Menang:
Walaupun bukan perkara biasa, terdapat syarat khusus di mana LEFT JOIN
boleh mengatasi prestasi INNER JOIN
:
Jadual Kecil: Dengan jadual yang sangat kecil (di bawah sepuluh baris), overhed operasi INNER JOIN
berasaskan cincang boleh melebihi overhed gelung bersarang yang biasanya digunakan dalam LEFT JOIN
pelan pelaksanaan.
Pengindeksan Tidak Mencukupi: Jika indeks tiada atau tidak mencukupi untuk INNER JOIN
, SQL Server mungkin memilih pelan pelaksanaan yang kurang cekap. LEFT JOIN
memanfaatkan gelung bersarang mungkin menawarkan prestasi yang lebih baik.
Ringkasan:
Walaupun LEFT JOIN
sememangnya memerlukan lebih banyak pemprosesan daripada INNER JOIN
, situasi yang melibatkan jadual kecil atau kekurangan pengindeksan yang betul boleh membawa kepada kelebihan prestasi yang tidak dijangka untuk LEFT JOIN
. Ketiadaan indeks yang sesuai adalah kemungkinan penyebab dalam kajian kes yang diterangkan di atas.
Atas ialah kandungan terperinci Bilakah LEFT JOIN Mengungguli Inner JOIN?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!