Tengo una consulta que usa una función en el predicado, algo como esto:
commentType = 'EL'
AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0)
Tengo un índice filtrado en commentType que tiene 40K filas y cuando ejecuto la consulta, el número estimado de filas para Index Seek es muy preciso (alrededor de 11K), pero para el siguiente paso (operador de clasificación) ignora por completo las estadísticas y solo estima el número total de filas en el índice filtrado.
¿Por qué está pasando esto? Sé lo básico sobre la sargabilidad , y lo probé solo por razones de cordura, reemplazando el dateadd por una fecha real (01-01-2014) y listo ... El tipo comenzó a adivinar el número de filas correctamente ...
¿Por qué sucede esto y cómo puedo solucionarlo? No puedo pasar una fecha fija ...
DATEADD(month, -13, DATEADD(day, 1-DATEPART(day, SYSDATETIME()))
ver si hay alguna diferencia?
(commentType, commentDate)
, ¿se comporta mejor allí? Es solo que los índices filtrados a veces pueden informar erróneamente las estimaciones en diferentes puntos de los planes. La estimación parece completa al informar el número total en el índice filtrado, pero en realidad es que el plan se muestra incorrectamente.
DATEADD(month,datediff(month,0,getdate()) - 13,0)
no tiene sentido para mi ¿Qué intentas hacer con esto? ¿Se podría mejorar / simplificar?