我有一个事实表,它将在我们早上的处理过程中以适当的计划运行。偶尔,在一天的晚些时候,如果我去查询它,它会有一个非常奇怪的计划。
当查询按日期分区的表时,您通常会看到这样的搜索谓词:
但是由于某种原因,它变成了这样:
是的,我知道上面显示了两个不同的表格。我从类似配置的表中提取了这个好例子,它适当地显示了我期望的搜索谓词。
这两个都是 Clustered Index Seek 运算符。更新统计数据似乎没有帮助,但Ola 的维护脚本的某些部分似乎每天早上都会修复它。
有人见过这个吗?关于如何恢复良好计划的任何提示?
在第二个执行计划中,seek谓词有一个
CONVERT_IMPLICIT
函数在里面。这意味着输入了错误的数据类型,SQL Server 必须将数据类型转换为其他类型。在这种情况下,它需要一个DATE
数据类型和一些不同于DATE
传入的东西……很可能是一个(VAR)CHAR
或N(VAR)CHAR
值。解决方法是在提交查询之前显式转换/转换值,或者修复代码以使用正确的数据类型。以下是有关此事的更多资源: