Při sestavování dotazu neví, jakou hodnotu budou mít proměnné. Můžete zkusit OPTION (RECOMPILE)
.
Předpokládám, že přidání AND
klauzule v dotazu (i když logicky není vůbec selektivnější) musí optimalizátora uvést v omyl, aby odhadl dotaz s větší selektivitou, čímž vám poskytne plán, který jste chtěli!
V komentářích uvádíte, že verze bez ExceptionDate = ExceptionDate
se odhaduje na 88234.8
řádky a verzi s 8823.48
Obecně se při absenci použitelných statistik SQL Server vrací zpět k heuristice v závislosti na typu operátoru porovnání v predikátu.
Předpokládá, že >
predikát vrátí například 30 % řádků a že =
predikát vrátí 10 % řádků, takže to vypadá, že to pouze aplikuje přímo na výsledek prvního odhadu. Zajímavé, že nebere v úvahu fakt, že rovný je zde proti samotnému sloupci!
c.f. Doporučené postupy pro správu statistik – Vyhněte se použití místních proměnných v dotazech