Ich habe eine Abfrage, die eine Funktion für das Prädikat verwendet, ungefähr so:
commentType = 'EL'
AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0)
Ich habe einen gefilterten Index für commentType mit 40 KB Zeilen. Wenn ich die Abfrage ausführe, ist die geschätzte Anzahl der Zeilen für die Indexsuche sehr genau (ca. 11 KB), aber für den nächsten Schritt (Sortieroperator) werden die Statistiken und vollständig ignoriert schätzt nur die Gesamtzahl der Zeilen im gefilterten Index.
Warum passiert dies? Ich kenne die Grundlagen der Sargabilität und habe sie nur aus Gründen der Vernunft getestet, indem ich das Datum durch ein aktuelles Datum (01.01.2014) und voila ersetzt habe ... Die Sortierung hat begonnen, die Anzahl der Zeilen richtig zu erraten ...
Warum passiert das und wie kann ich es beheben? Ich kann keinen festen Termin überschreiten ...
DATEADD(month, -13, DATEADD(day, 1-DATEPART(day, SYSDATETIME()))
festzustellen, ob es einen Unterschied gibt?
(commentType, commentDate)
, verhält er sich dort besser? Es ist nur so, dass gefilterte Indizes manchmal Schätzungen an verschiedenen Stellen in Plänen falsch melden können. Die Schätzung scheint ein Ausweg zu sein, wenn die Gesamtzahl im gefilterten Index angegeben wird, aber tatsächlich wird der Plan falsch angezeigt.
DATEADD(month,datediff(month,0,getdate()) - 13,0)
macht für mich keinen Sinn. Was versuchst du damit zu machen? Darf es verbessert / vereinfacht werden?