Ada beberapa kemungkinan penjelasan mengapa Anda melihat perilaku ini. Beberapa yang umum adalah
- Subquery atau CTE mungkin sedang dievaluasi ulang berulang kali.
- Mematerialisasikan sebagian hasil menjadi
#temp
tabel dapat memaksa urutan gabungan yang lebih optimal untuk bagian rencana tersebut dengan menghapus beberapa opsi yang mungkin dari persamaan. - Mematerialisasikan sebagian hasil menjadi
#temp
tabel dapat meningkatkan sisa rencana dengan mengoreksi perkiraan kardinalitas yang buruk.
Metode yang paling dapat diandalkan adalah dengan menggunakan #temp
meja dan wujudkan sendiri.
Gagal mengenai poin 1, lihat Berikan petunjuk untuk memaksa materialisasi menengah dari CTE atau tabel turunan
. Penggunaan TOP(large_number) ... ORDER BY
sering kali dapat mendorong hasil untuk dikumpulkan daripada dievaluasi berulang kali.
Bahkan jika itu berhasil, tidak ada statistik pada kumparan.
Untuk poin 2 dan 3 Anda perlu menganalisis mengapa Anda tidak mendapatkan rencana yang diinginkan. Mungkin menulis ulang kueri untuk menggunakan predikat sargable, atau memperbarui statistik mungkin mendapatkan rencana yang lebih baik. Jika gagal, Anda dapat mencoba menggunakan petunjuk kueri untuk mendapatkan paket yang diinginkan.