6

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

但没有运气。那么这个字段什么时候更新呢?我怎样才能强制它更新?

4

2 回答 2

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 中。

于 2012-05-18T18:57:17.483 回答
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

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

于 2012-05-21T04:52:17.543 回答