我用SQL SERVER 2012
我有我Auto Update Stats
对我的数据库。
从下面的链接中,我了解到,对于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
建立统计资料
CREATE STATISTICS rn
ON stst (rn)
CREATE STATISTICS name
ON stst (name)
检查创建的统计信息
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
根据公式
select SQRT(1000 * 500) -- 707.106781186548
因此,如果我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
开火 auto update stats
Select * from stst
查看统计
DBCC show_statistics('stst', rn) -- Rows 500
DBCC show_statistics('stst', name) -- Rows 500
不幸的是仍然Rows
是500
唯一的。
即使在将1000
记录插入到我的表中之后,这显然比707.106781186548
执行记录时还要大,SELECT
为什么自动更新统计信息没有触发?我在这里想念什么