Sql-Server
stats_date 為空
如果我在我們的系統上執行此查詢:
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 函式進行外部應用以查看是否得到相同的結果?
SELECT t.name , s.object_id , s.stats_id , c.name , sc.stats_column_id , s.name , sp.last_updated , sp.rows_sampled , sp.modification_counter , sp.steps , sp.rows FROM [sys].[stats] AS [s] INNER JOIN sys.stats_columns sc ON s.stats_id = sc.stats_id AND s.object_id = sc.object_id INNER JOIN sys.columns c ON c.object_id = sc.object_id AND c.column_id = sc.column_id INNER JOIN sys.tables t ON c.object_id = t.object_id OUTER APPLY sys.dm_db_stats_properties([s].[object_id], [s].[stats_id]) AS [sp] WHERE t.name LIKE 'mytable%';