SQL Server **不直接記錄** 索引重建/重組時間。但 ALTER INDEX REBUILD 會同步更新統計資訊(等同 UPDATE STATISTICS WITH FULLSCAN),故可透過 STATS_DATE() 查詢統計資訊最後更新時間,作為索引維護時間的**近似參考**。
SELECT
OBJECT_NAME(object_id) AS TableName,
name AS IndexName,
STATS_DATE(object_id, stats_id) AS LastStatsUpdate
FROM sys.stats
WHERE name NOT LIKE '_WA%' -- 排除系統自動建立的統計資訊
AND OBJECTPROPERTY(object_id, 'IsMSShipped') = 0 -- 僅使用者資料表
ORDER BY TableName, IndexName;
UPDATE STATISTICS、sp_updatestats、索引重組**不**更新統計資訊)。ALTER INDEX REORGANIZE **不會** 更新統計資訊,故此法無法偵測重組操作。stats_id = index_id。AND STATS_DATE(...) > '2024-01-01' 等時間窗。index_rebuild_started/completed、index_reorganize_started/completed 事件,精確記錄時間、持續時間、目標索引。msdb.dbo.sysmaintplan_log、sysmaintplan_logdetail 記錄維護計畫執行歷史。CREATE EVENT SESSION IndexMaintenanceTracking ON SERVER
ADD EVENT sqlserver.index_rebuild_completed,
ADD EVENT sqlserver.index_reorganize_completed
ADD TARGET package0.event_file (SET filename = N'IndexMaint');
GO
STATS_DATE 為零成本、即時可用的「近似指標」,適合快速巡檢;嚴格稽核或自動化報表請部署 Extended Events 或維護記錄機制。