J'ai une requête qui utilise une fonction sur le prédicat, quelque chose comme ceci:
commentType = 'EL'
AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0)
J'ai un index filtré sur commentType qui a 40K lignes et lorsque j'exécute la requête, le nombre estimé de lignes pour la recherche d'index est très précis (environ 11K), mais pour l'étape suivante (opérateur de tri), il ignore complètement les statistiques et estime simplement le nombre total de lignes dans l'index filtré.
Pourquoi cela arrive-t-il? Je connais les bases de la sargabilité , et j'ai testé juste pour le bien de la raison en remplaçant le dateadd par une date réelle (2014-01-01) et le tour est joué ... Le tri a commencé à deviner le nombre de lignes correctement ...
Pourquoi cela se produit-il et comment puis-je le corriger? Je ne peux pas passer une date fixe ...
DATEADD(month, -13, DATEADD(day, 1-DATEPART(day, SYSDATETIME()))
voir s'il y a une différence?
(commentType, commentDate)
, est-ce qu'il se comporte mieux là-bas? C'est juste que les indices filtrés peuvent parfois déformer les estimations à différents points des plans. L'estimation semble être sortie en signalant le nombre total dans l'index filtré, mais c'est en fait que le plan est affiché incorrect.
DATEADD(month,datediff(month,0,getdate()) - 13,0)
n'a pas de sens pour moi. Qu'essayez-vous de faire avec ça? Peut-il être amélioré / simplifié?