Eu tenho uma consulta que usa uma função no predicado, algo como isto:
commentType = 'EL'
AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0)
Eu tenho um índice filtrado no commentType que tem 40K linhas e, quando executo a consulta, o número estimado de linhas para a Busca por Índice é muito preciso (em torno de 11K), mas para a próxima etapa (operador de classificação) ele ignora completamente as estatísticas e apenas estima o número total de linhas no índice filtrado.
Por que isso está acontecendo? Eu sei o básico sobre sargabilidade e testei apenas por uma questão de sanidade, substituindo os dados datados por uma data real (01-01-2014) e pronto ... O tipo começou a adivinhar o número de linhas corretamente ...
Por que isso está acontecendo e como posso corrigi-lo? Não posso passar uma data fixa ...
DATEADD(month, -13, DATEADD(day, 1-DATEPART(day, SYSDATETIME()))
ver se há alguma diferença?
(commentType, commentDate)
, ele se comporta melhor lá? Às vezes, os índices filtrados podem às vezes relatar estimativas em pontos diferentes dos planos. A estimativa parece muito clara ao informar o número total no índice filtrado, mas na verdade o plano está sendo mostrado incorretamente.
DATEADD(month,datediff(month,0,getdate()) - 13,0)
não faz sentido para mim. O que você está tentando fazer com isso? Pode ser melhorado / simplificado?