2012-05-18 108 views
6

我使用SQL Server 2008 R2,並運行下面的查詢,試圖看到當指數最後在我的數據庫使用下面的SQL更新:何時更新SQL Server索引使用情況統計信息?

SELECT last_system_update, last_user_update, 
OBJECT_NAME(object_id) AS tblName 
FROM sys.dm_db_index_usage_stats 
WHERE database_id = DB_ID('mydatabase') 

last_user_update領域是正確的,包含NULL,自SQL Server上次重新啓動以來沒有更新過表。

當我運行下面的查詢來重建索引,我期望的last_system_update字段包含一個日期來表示指數重建:

ALTER INDEX ALL ON dbo.MyTable 
REBUILD 

但是這個領域仍然是NULL。實際上,對於服務器上所有數據庫中的所有索引,last_system_update字段爲空(NULL)。 last_user_update也不會改變。

我也試過:

UPDATE STATISTICS dbo.MyTable 

,但沒有運氣。那麼這個領域何時更新?我該如何強制更新?

+0

我還沒有檢查過它,但我的印象是sys.dm_db_index_usage_stats每次在查詢中使用(user_updates)時都會更新;我認爲重建索引不會在規則下計算。您可以編寫一個查詢來選擇並使用查詢提示來觸摸索引。 – u07ch

+0

感謝u07ch。 last_user_scan/seek的統計信息很好。我試圖讓上一次索引被重建/修改 - 但不是編輯表格。 – geographika

回答

10

您可以使用下面的查詢,以確定何時指標進行了最後一次更新,它採用STATS_DATE()

USE your_db; 
SELECT t.name AS Table_Name 
     ,i.name AS Index_Name 
     ,i.type_desc AS Index_Type 
     ,STATS_DATE(i.object_id,i.index_id) AS Date_Updated 
FROM sys.indexes i 
JOIN sys.tables t 
    ON t.object_id = i.object_id 
WHERE i.type > 0 
ORDER BY t.name ASC 
    ,i.type_desc ASC 
    ,i.name ASC; 

我相信,這將只能與SQL Server 2005或較新的工作,因爲SYS.INDEXES不在SQL Server 2000中

+0

完美 - 謝謝。 – geographika

相關問題