Pரத*_*ீப் 8 sql-server statistics sql-server-2012
正在使用我的数据库中SQL SERVER 2012有我的Auto Update Stats ON。
从下面的链接我了解到,自动更新统计信息将针对SQRT(1000 * Table rows)表行中的每个更改触发。
https://blogs.msdn.microsoft.com/srgolla/2012/09/04/sql-server-statistics-explained/
我创建了一个包含 1000 条记录的表
SELECT TOP 500 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
name
INTO stst
FROM sys.objects
Run Code Online (Sandbox Code Playgroud)
创建统计信息
CREATE STATISTICS rn
ON stst (rn)
CREATE STATISTICS name
ON stst (name)
Run Code Online (Sandbox Code Playgroud)
检查创建的统计信息
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
Run Code Online (Sandbox Code Playgroud)
按照公式
select SQRT(1000 * 500) -- 707.106781186548
Run Code Online (Sandbox Code Playgroud)
因此,如果我707.106781186548在表中添加/修改记录,则应触发自动更新统计信息
1000向我的表中添加更多记录,这应该足以触发auto update stats
INSERT INTO stst(rn,name)
SELECT TOP 1000 Row_number()OVER (ORDER BY (SELECT NULL)) rn,
a.name
FROM sys.objects a
Run Code Online (Sandbox Code Playgroud)
开火 auto update stats
Select * from stst
Run Code Online (Sandbox Code Playgroud)
检查统计数据
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
Run Code Online (Sandbox Code Playgroud)
不幸的是仍然Rows是500唯一的。
即使在1000我的表中插入记录后,这显然大于707.106781186548执行时SELECT为什么自动更新统计数据没有触发?我在这里错过了什么
Pau*_*ite 11
新的计算仅在启用跟踪标志 2371 时使用,除非在 SQL Server 2016 上上下文数据库兼容性级别设置为 130,这是默认行为。请参阅 Microsoft 知识库文章 2754171:
控制 SQL Server 中的 Autostat (AUTO_UPDATE_STATISTICS) 行为
修改数据时不会更新统计信息。当基于成本的优化发现查询的有趣统计信息过时时,会触发统计信息更新。
对于非常简单(“琐碎”)的查询,优化器不会进入基于成本的优化,其中单个明显的计划始终是最佳的。在这种情况下不会发生统计信息更新。
请参阅Greg Low的 Microsoft 白皮书计划在 SQL Server 2012 中缓存和重新编译。
| 归档时间: |
|
| 查看次数: |
3428 次 |
| 最近记录: |