如果我在我们的系统上运行这个查询:
SELECT STATS_DATE(t.object_id, s.stats_id) AS stdate, *
from sys.stats s WITH (NOLOCK)
INNER JOIN sys.tables t WITH (NOLOCK) ON t.object_id = s.object_id
WHERE t.name LIKE 'mytable%'
我有时会看到该stats_date
函数返回 NULL。根据 BOL,这应该是不可能的,除非出现错误。它没有说明是哪个错误。
该表相当大,有 110 亿行。如果我跑:
UPDATE STATISTICS fct.mytable ( pk_mytable)
stats_date
再次返回为不为空。
为什么日期为空,我该如何防止这种情况发生?
只有主键的统计数据为 NULL。
如果我跑:
DBCC SHOW_STATISTICS ('fct.MyTable', 'IX_MyTableID')
它返回了我期望的 3 个结果集。如果我跑:
DBCC SHOW_STATISTICS ('fct.MyTable', 'PK_MyTable')
它返回:
根据MSDN,它可以在错误时返回 null,但我不确定为什么你会遇到错误。您是否考虑过对 sys.dm_db_stats_properties 函数进行外部应用以查看是否获得相同的结果?