我正在使用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
但没有运气。那么这个字段何时更新?我怎么能强迫它更新呢?
答案 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
与用户查询列相同,但记录时间 索引用于系统操作,例如自动统计 操作