Itu tidak tahu apa nilai variabel ketika mengkompilasi kueri. Anda dapat mencoba OPTION (RECOMPILE)
.
Saya berasumsi bahwa penambahan AND
klausa dalam kueri (meskipun secara logis membuatnya tidak lebih selektif sama sekali) harus menyesatkan pengoptimal untuk memperkirakan kueri dengan selektivitas yang lebih besar sehingga memberi Anda rencana yang Anda inginkan!
Anda mengatakan di komentar bahwa versi tanpa ExceptionDate = ExceptionDate
diperkirakan 88234.8
baris dan versi dengan 8823.48
Umumnya dengan tidak adanya statistik yang dapat digunakan, SQL Server kembali ke heuristik tergantung pada jenis operator perbandingan dalam predikat.
Diasumsikan bahwa >
predikat akan mengembalikan 30% dari baris misalnya dan bahwa =
predikat akan mengembalikan 10% dari baris sehingga sepertinya hanya menerapkannya secara langsung ke hasil perkiraan pertama. Menarik bahwa itu tidak memperhitungkan fakta bahwa persamaan melawan kolom itu sendiri di sini!
c.f. Praktik Terbaik untuk Mengelola Statistik - Hindari penggunaan variabel lokal dalam kueri