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

时间:2012-05-18 13:17:04

标签: sql sql-server-2008 indexing

我正在使用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')

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

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

2 个答案:

答案 0 :(得分: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中。

答案 1 :(得分:0)

我在以下网址找到了有关这些专栏的更多详情:

http://sqlblog.com/blogs/louis_davidson/archive/2007/07/22/sys-dm-db-index-usage-stats.aspx

  

system_seeks,system_scans,system_lookups,system_updates,   last_system_seek,last_system_scan,last_system_lookup,   last_system_update

     

与用户查询列相同,但记录时间   索引用于系统操作,例如自动统计   操作