Den vet inte vad värdet på variablerna kommer att vara när den kompilerar frågan. Du kan prova OPTION (OMKOMPILERA)
.
Jag antar att tillägget av AND
klausulen i frågan (även om den logiskt sett inte gör den mer selektiv alls) måste vilseleda optimeraren till att uppskatta frågan med större selektivitet och därmed ge dig den plan du ville ha!
Du säger i kommentarerna att versionen utan ExceptionDate =ExceptionDate
uppskattas till 88234.8
rader och versionen med 8823.48
Generellt i avsaknad av användbar statistik faller SQL Server tillbaka till heuristik beroende på typen av jämförelseoperator i predikatet.
Det förutsätter att en > predikat kommer att returnera 30% av raderna till exempel och att en
=
predikat kommer att returnera 10 % av raderna så det ser ut som att det bara appliceras direkt på resultatet av den första uppskattningen. Intressant att den inte tar hänsyn till att lika är mot själva kolumnen här!
c.f. Bästa metoder för att hantera statistik – Undvik användning av lokala variabler i frågor a>