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;
Result
