SANGAT. Pertandingan hash akan menjadi peningkatan besar. Membuat hash pada tabel baris 19.223 yang lebih kecil kemudian menyelidikinya dengan tabel baris 65.991 yang lebih besar adalah operasi yang jauh lebih kecil daripada loop bersarang yang membutuhkan 1.268.544.993 perbandingan baris.
Satu-satunya alasan server akan memilih loop bersarang adalah karena terlalu meremehkan jumlah baris yang terlibat. Apakah tabel Anda memiliki statistik, dan jika demikian, apakah mereka diperbarui secara berkala? Statistiklah yang memungkinkan server memilih rencana eksekusi yang baik.
Jika Anda telah menangani statistik dengan benar dan masih mengalami masalah, Anda dapat memaksanya untuk menggunakan gabungan HASH seperti:
SELECT *
FROM
TableA A -- The smaller table
LEFT HASH JOIN TableB B -- the larger table
Harap dicatat bahwa saat Anda melakukan ini, itu juga akan memaksa pesanan bergabung. Ini berarti Anda harus mengatur semua tabel Anda dengan benar sehingga urutan bergabungnya masuk akal. Umumnya Anda akan memeriksa rencana eksekusi yang sudah dimiliki server dan mengubah urutan tabel Anda dalam kueri agar sesuai. Jika Anda tidak terbiasa dengan cara melakukannya, dasarnya adalah bahwa setiap input "kiri" didahulukan, dan dalam rencana eksekusi grafis, input kiri adalah bawah satu. Gabungan kompleks yang melibatkan banyak tabel mungkin harus mengelompokkan gabungan di dalam tanda kurung, atau gunakan RIGHT JOIN
untuk mendapatkan rencana eksekusi yang optimal (tukar input kiri dan kanan, tetapi perkenalkan tabel pada titik yang benar dalam urutan bergabung).
Biasanya yang terbaik adalah menghindari penggunaan petunjuk bergabung dan memaksa urutan bergabung, jadi lakukan apa pun yang Anda bisa terlebih dahulu! Anda dapat melihat indeks pada tabel, fragmentasi, pengurangan ukuran kolom (seperti menggunakan varchar
bukannya nvarchar
di mana Unicode tidak diperlukan), atau membagi kueri menjadi beberapa bagian (masukkan ke tabel temp terlebih dahulu, lalu gabungkan ke dalamnya).