使用Tsql,我怎么知道上次在SQL Server(2000,2005或2008)上运行Index rebuild,reorg或updatestatistics?
此致
答案 0 :(得分:9)
SQL Server不存储此信息。您可以根据上次更新给定索引的统计信息的日期获得“近似”估计值,因为REBUILD操作还将更新索引的统计信息。
以下是使用AdventureWorks数据库的示例:
USE AdventureWorks;
GO
SELECT name AS Stats,
STATS_DATE(object_id, stats_id) AS LastStatsUpdate
FROM sys.stats
WHERE object_id = OBJECT_ID('Sales.SalesOrderDetail')
and left(name,4)!='_WA_';
GO
您可能需要考虑使用许多免费提供的SQL Server索引优化维护脚本之一。这些提供了一种方法来存储在给定数据库上执行的索引操作的详细信息,从而提供有关上次重建索引的信息。
看看Michelle Ufford写的优秀Index Maintenance Script
答案 1 :(得分:3)
对于SQL Server 2000,可能需要以下脚本,因为SQL 2000中不存在sys.stats:
DBCC SHOW_STATISTICS(TABLENAME, INDEX_NAME)
非常感谢您的脚本John!
编辑:
我一直在考虑SQL 2005+的这个脚本(并且需要查看TableName,IndexName,LastStatsUpdate格式的数据),并且我想出了以下脚本。
我确定它需要抛光,所以请根据需要随意调整。
SELECT OBJECT_NAME(object_id) [TableName],
name [IndexName],
STATS_DATE(object_id, stats_id) [LastStatsUpdate]
FROM sys.stats
WHERE name NOT LIKE '_WA%'
AND STATS_DATE(object_id, stats_id) IS NOT NULL
AND OBJECTPROPERTY(object_id, 'IsMSShipped') = 0
ORDER BY TableName, IndexName