Tsql, savoir quand rebuild l'index, reorg ou updatestatistics a été exécuté pour la dernière fois sur le server SQL

En utilisant Tsql, comment puis-je savoir quand l'index rebuild, réorganiser ou mettre à jour les statistics a été exécuté pour la dernière fois sur un server SQL (2000, 2005 ou 2008)?

Cordialement

SQL Server ne stocke pas ces informations. Vous pouvez get une estimation «approximative» basée sur la date à laquelle les statistics ont été mises à jour pour la dernière fois pour un indice donné, car une opération REBUILD mettra également à jour les statistics de l'indice.

Voici un exemple utilisant la database 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 

Vous souhaiterez peut-être envisager d'utiliser l'un des nombreux scripts de maintenance d'indexing librement disponibles pour SQL Server. Ceux-ci fournissent un moyen de stocker les détails des opérations d'index effectuées sur une database donnée et fournissent ainsi des informations sur le moment où un index a été reconstruit pour la dernière fois.

Jetez un oeil à l'excellent Index Maintenance Script écrit par Michelle Ufford

Pour SQL Server 2000, le script suivant peut être nécessaire car sys.stats n'existe pas dans SQL 2000:

 DBCC SHOW_STATISTICS(TABLENAME, INDEX_NAME) 

Merci beaucoup pour votre script John!

EDIT: J'ai envisagé ce script pour SQL 2005+ (et j'ai eu besoin de voir datatables au format TableName, IndexName, LastStatsUpdate), et j'ai trouvé le script suivant.
Je suis sûr qu'il a besoin de polissage, alors n'hésitez pas à modifier si nécessaire.

 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