我有一种我无法理解的情况。我的SQL Server执行计划告诉我,表上缺少统计信息,但是已经创建了统计信息:
但是,如果我们看一下表格,将会看到有一个自动创建的统计信息:
有人可以帮助您了解情况如何吗?
当前数据库上的Auto_Update和Auto_Create统计信息已打开。
我正在使用SQL Server 2014。
我有一种我无法理解的情况。我的SQL Server执行计划告诉我,表上缺少统计信息,但是已经创建了统计信息:
但是,如果我们看一下表格,将会看到有一个自动创建的统计信息:
有人可以帮助您了解情况如何吗?
当前数据库上的Auto_Update和Auto_Create统计信息已打开。
我正在使用SQL Server 2014。
Answers:
该警告并不总是与缺少单列统计信息相对应。
没有一种简单的方法可以精确地确定优化器在所有情况下都寻找并没有找到的确切统计信息,但是它几乎总是多列统计信息,它将在查询中的多个相等谓词之间提供一些相关信息。
也许在您的情况下,它与警告显示在扫描之后的筛选器中的谓词完全对应。
如果SQL Server报告“缺少统计信息”警告的所有列会很好,但是不幸的是,今天这不是它的工作方式。
可能需要一定程度的反复试验才能确定您需要创建以删除警告的多列统计信息。请注意,无法自动创建多列统计信息。尽管有警告,但即使提供了缺失的统计信息,您也可能不会发现估计的质量会提高。
既然很明显已经有特定列的统计信息,所以我提供了两种可能性:
DEV
名称,所以在一种情况下您正在查看开发程序而在另一种情况下却没有。请确认简单答案(1)不是问题,然后尝试发出相同的查询OPTION (RECOMPILE)
以确认或排除(2)。
我刚刚注意到,当您收到有关统计信息的警告时,如果使用以下设置运行查询或过程:
SET SHOWPLAN_ALL ON
您可以查看缺少的统计信息:
并使用此处的脚本,您可以查看当前的统计信息,如果缺少这些统计信息,则可以添加它们。