执行计划中缺少统计信息的警告

Art*_*yan 33 sql-server statistics sql-server-2014

我有一个我无法理解的情况。我的 SQL Server 执行计划告诉我,我缺少表上的统计信息,但统计信息已经创建:

警告

但是如果我们查看表格,我们会看到有一个自动创建的统计信息:

在此处输入图片说明

有人可以帮助理解它是怎么回事吗?

Auto_Update 和 Auto_Create 统计信息在当前数据库上打开。

我正在使用 SQL Server 2014。

Pau*_*ite 23

警告并不总是对应于缺少单列统计信息。

没有一种简单的方法可以精确地确定优化器在所有情况下寻找但未找到的确切统计信息,但它几乎总是一个多列统计信息,可以跨查询中的多个等式谓词提供一些相关信息。

也许在您的情况下,它与出现警告的扫描后过滤器中的谓词完全对应。

如果 SQL Server 报告“缺少统计信息”警告的所有列,那就太好了,但不幸的是,这不是今天的工作方式。

可能需要进行一定量的反复试验来确定您需要创建的多列统计信息来删除警告。请注意,无法自动创建多列统计信息。尽管有警告,即使提供了缺失的统计数据,您也可能会或可能不会发现估计的质量有所提高。


Aar*_*and 9

由于很明显特定列的统计数据已经存在,我提供了两种可能性:

  1. 对象资源管理器指向不同的数据库 - 我很怀疑,因为该数据库DEV在名称中,所以有可能在一种情况下您正在查看 dev 而在另一种情况下您没有。
  2. 正在使用的计划是从创建统计之前开始的(它是更早生成的,或者不太可能是在创建统计时阻止触发重新编译)。

请验证简单答案 (1) 不是问题,并尝试发出相同的查询OPTION (RECOMPILE)以确认或排除 (2)。


Mar*_*lli 6

我刚刚注意到,当您收到有关统计信息的此类警告时,如果您使用以下设置运行查询或程序:

SET SHOWPLAN_ALL ON
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

你可以看到缺少的统计数据是什么:

在此处输入图片说明

使用此处的脚本,您可以查看当前的统计数据,如果缺少,您可以添加它们。