This code is designed to provide information about the indexes in the database, including their creation dates, last usage dates, and whether they have been used recently.
TSQL
-- Create a temporary table to store index information CREATE TABLE #IndexInfo ( TableName NVARCHAR(128), IndexName NVARCHAR(128), CreationDate DATETIME, LastUsedDate DATETIME, NotUsedForLast30Days VARCHAR(3) ); -- Populate the temporary table with index information EXEC sp_MSforeachtable ' INSERT INTO #IndexInfo (TableName, IndexName, CreationDate, LastUsedDate, NotUsedForLast30Days) SELECT OBJECT_NAME(i.object_id) AS TableName, i.name AS IndexName, o.create_date AS CreationDate, COALESCE(us.last_user_seek, us.last_user_scan, us.last_user_lookup, us.last_user_update) AS LastUsedDate, CASE WHEN COALESCE(us.last_user_seek, us.last_user_scan, us.last_user_lookup, us.last_user_update) IS NULL OR COALESCE(us.last_user_seek, us.last_user_scan, us.last_user_lookup, us.last_user_update) < DATEADD(DAY, -30, GETDATE()) THEN ''Yes'' ELSE ''No'' END AS NotUsedForLast30Days FROM sys.indexes i INNER JOIN sys.objects o ON i.object_id = o.object_id LEFT JOIN sys.dm_db_index_usage_stats us ON i.object_id = us.object_id AND i.index_id = us.index_id WHERE i.object_id = OBJECT_ID(''?'') '; -- Retrieve the index information SELECT TableName, IndexName, CreationDate, LastUsedDate, NotUsedForLast30Days FROM #IndexInfo ORDER BY TableName, IndexName; -- Clean up the temporary table DROP TABLE #IndexInfo;