我正在使用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
但没有运气.那么这个字段何时更新?我怎么能强迫它更新?
解决方法
您可以使用以下查询来确定上次更新索引的时间,该索引使用
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中.