sql-server - 表统计信息未更新
问题描述
我们在 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)
但同样:统计数据没有改变。
我们已经验证没有发生批量更新/插入/删除。
请帮忙。
解决方案
我们尝试了很多统计组合,但没有帮助。
最后我们在下面尝试了它并且它有效。
ALTER INDEX ALL ON dbo.Tablename
REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON,STATISTICS_NORECOMPUTE = ON)
注意:在 prod 中我们应该三思而后行。我们应该知道表的数据大小是多少,否则我们将阻塞。
我们仍然不确定导致这种行为的原因,但我怀疑我们在堆上有索引(非集群唯一索引)。
推荐阅读
- groovy - 将文件中的行保存到集合中
- javascript - 弹出字符串中元素的函数
- apache - Apache前端无法请求表达后端
- azure-devops - 如何在不同环境中使用 Azure DevOps Pipeline 发布 Microsoft Forms(Office 365 表单)?
- java - 无法从 Firebase 存储下载文档文件
- flutter - 如何在 DateTimeRangePicker 中禁用以前的日期?
- jsf - 如何创建标题和子标题基于父级和 n 个子级的 primefaces 数据表
- node.js - 找不到模块“xlsx”
- php - 为什么 PDO 将我的 bool(false) 参数转换为 string('')?
- linq - 通过linq从一个类中获取列表以填充其他类中的taxtbox