Dalam blog Craig Freedman, Nested Loops Join , ia menjelaskan mengapa loop nested bergabung tidak dapat mendukung join luar kanan:
Masalahnya adalah kita memindai tabel bagian dalam beberapa kali - satu kali untuk setiap baris gabungan luar. Kami mungkin menemukan baris dalam yang sama beberapa kali selama beberapa pemindaian ini. Pada titik mana kita dapat menyimpulkan bahwa barisan dalam tertentu belum atau tidak mau bergabung?
Dapatkah seseorang tolong jelaskan ini dengan cara yang sangat sederhana dan mendidik?
Apakah ini berarti bahwa loop dimulai dengan tabel luar ( R1
) dan memindai bagian dalam ( R2
)?
Saya mengerti bahwa untuk R1
nilai yang tidak bergabung R2
, itu harus diganti dengan NULL
sehingga set hasil menjadi ( NULL, R2
). Bagi saya tampaknya tidak mungkin untuk mengembalikan R2
nilai ketika R1
tidak bergabung, karena alasan itu tidak dapat mengetahui R2
nilai yang akan dikembalikan. Tapi bukan itu yang dijelaskan. Atau itu?
SQL Server sebenarnya tidak mengoptimalkan (dan sering menggantikan) RIGHT JOIN
dengan LEFT JOIN
, tapi pertanyaannya adalah untuk menjelaskan mengapa hal itu secara teknis tidak mungkin untuk NESTED LOOPS JOIN
menggunakan / dukungan RIGHT JOIN
logika.
sumber