Den ved ikke, hvad værdien af variablerne vil være, når den kompilerer forespørgslen. Du kan prøve OPTION (RECOMPILE)
.
Jeg formoder, at tilføjelsen af AND
klausulen i forespørgslen (selvom den logisk nok ikke gør den mere selektiv overhovedet) skal vildlede optimeringsværktøjet til at estimere forespørgslen med større selektivitet og dermed give dig den plan, du ønskede!
Du siger i kommentarerne, at versionen uden ExceptionDate =ExceptionDate
er estimeret til 88234.8
rækker og versionen med 8823.48
I mangel af brugbare statistikker falder SQL Server generelt tilbage til heuristik afhængig af typen af sammenligningsoperator i prædikatet.
Det antager, at en > prædikat vil for eksempel returnere 30% af rækkerne, og at en
=
prædikat vil returnere 10% af rækkerne, så det ser ud til, at det bare anvender det direkte på resultatet af det første estimat. Interessant at den ikke tager højde for, at ligemænd er imod selve spalten her!
c.f. Bedste praksis til håndtering af statistik - Undgå brug af lokale variabler i forespørgsler