我有一个查询,该查询在谓词上使用函数,如下所示:
commentType = 'EL'
AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0)
我在commentType上有一个经过筛选的索引,该索引具有40K行,当我运行查询时,Index Seek的估计行数非常准确(大约11K),但是对于下一步(sort运算符),它完全忽略了统计信息,仅估算过滤索引中的总行数。
为什么会这样呢?我知道有关可保留性的基础知识,并且为了安全起见,我已经进行了测试,以实际日期(2014-01-01)替换dateadd和voila ...排序开始正确地猜测行数...
为什么会发生这种情况,我该如何解决?我无法通过固定日期...
DATEADD(month, -13, DATEADD(day, 1-DATEPART(day, SYSDATETIME()))
看看是否有区别吗?
(commentType, commentDate)
,那么该索引的性能会更好吗?只是过滤后的索引有时可能会误报计划中不同点的估计。通过在过滤后的索引中报告总数,估计值似乎不合时宜,但实际上是计划显示有误。
DATEADD(month,datediff(month,0,getdate()) - 13,0)
对我来说没有意义。您打算怎么做?可以改进/简化吗?