我在我的数据库中有一些自动生成的_WA_Sys_统计数据,这些数据已经有一段时间没有更新了(与同一表中的其他统计数据相比较)。
根据经验法则,在表格中行数>500时,当数据变化超过20% + 500行时,统计数据会被更新。
然而,通过以下查询,我可以看到
SELECT t.name,
i.name,
i.rowcnt,
i.rowmodctr,
p.last_updated
FROM sys.sysindexes i
JOIN sys.tables t
ON i.id = t.object_id
JOIN sys.stats s
ON s.object_id = t.object_id AND i.name = s.name
CROSS APPLY sys.dm_db_stats_properties(s.object_id,s.stats_id) p
WHERE rowmodctr > 0
ORDER BY i.rowmodctr DESC
这里有一个表格,其中有一些非常过时的_WA_Sys_统计数据(并且rowmodctr的值超过了20% + 500)。
如果对该表格运行一个查询,并在WHERE子句中添加与过时的_WA_Sys_统计数据相关的列,并检查统计数据的更新日期,我可以看到它已经更新了。
如果再次运行带有WHERE子句的相同查询,统计数据不会更新。
似乎_WA_Sys_统计数据只在运行使用它们且它们过时的查询时才会更新?