首页 > 解决方案 > 表统计信息未更新

问题描述

我们在 SQL Server 2016 中面临一个奇怪的场景。我们有一个超过 300000 行的表。

我们在表上创建了一个索引。我们将此表用作连接的一部分(注意:连接关闭中的列已创建索引),但查询优化器正在执行表扫描。

当我们检查统计数据时:

RowsInTable    RowsSampled
  NULL          NULL

然后我跑了:

UPDATE STATISTICS tablename 

统计数据没有改变。

然后我们尝试重建索引:

ALTER INDEX ALL ON dbo.tablename
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,
              STATISTICS_NORECOMPUTE = ON)

但同样:统计数据没有改变。

我们已经验证没有发生批量更新/插入/删除。

请帮忙。

标签: sql-serversql-server-2016rdbms

解决方案


我们尝试了很多统计组合,但没有帮助。

最后我们在下面尝试了它并且它有效。

ALTER INDEX ALL ON dbo.Tablename
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,STATISTICS_NORECOMPUTE = ON)

注意:在 prod 中我们应该三思而后行。我们应该知道表的数据大小是多少,否则我们将阻塞。

我们仍然不确定导致这种行为的原因,但我怀疑我们在堆上有索引(非集群唯一索引)。


推荐阅读