SQL Server索引使用情况统计何时更新?

geo*_*ika 6 sql indexing sql-server-2008

我正在使用SQL Server 2008 R2,并运行以下查询以尝试使用以下SQL查看我的数据库中上次更新索引的时间:

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')
Run Code Online (Sandbox Code Playgroud)

last_user_update领域是正确的,在没有更新已表,因为SQL Server的上次重新启动已取得含有NULL.

当我运行以下查询来重建索引时,我希望last_system_update字段包含一个日期,以指示索引已重建:

ALTER INDEX ALL ON dbo.MyTable
REBUILD
Run Code Online (Sandbox Code Playgroud)

但是,此字段仍为NULL.实际上,对于服务器上所有数据库中的所有索引,last_system_update字段为空(NULL).last_user_update也不会改变.

我也尝试过:

UPDATE STATISTICS dbo.MyTable
Run Code Online (Sandbox Code Playgroud)

但没有运气.那么这个字段何时更新?我怎么能强迫它更新?

bha*_*mby 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;
Run Code Online (Sandbox Code Playgroud)

我相信这只适用于SQL Server 2005或更新版本,因为sys.indexes不在SQL Server 2000中.