2025-11-02

Gather the Usage and Size of all Indexes across every database

EXEC sp_MSforeachdb 'USE [?];
SELECT DB_NAME() AS DB,
    OBJECT_NAME(i.[object_id]) AS [TableName],
    i.name AS [IndexName],
    i.index_id,
    s.user_seeks,
    s.user_scans,
    s.user_lookups,
    s.user_updates,
    i.type_desc AS [IndexType],
    s.last_user_seek,
    s.last_user_scan,
    s.last_user_lookup,
    s.last_user_update,
    SUM(ps.used_page_count) * 8 / 1024 AS [Used Space (MB)],
    SUM(ps.reserved_page_count) * 8 / 1024 AS [Reserved Space (MB)]
FROM 
    sys.dm_db_index_usage_stats AS s
    INNER JOIN sys.indexes AS i
        ON s.[object_id] = i.[object_id] AND s.index_id = i.index_id
    INNER JOIN  sys.dm_db_partition_stats AS ps
        ON ps.object_id = i.object_id AND ps.index_id = i.index_id
WHERE 
    OBJECTPROPERTY(s.[object_id], ''IsUserTable'') = 1
    AND s.database_id = DB_ID()
GROUP BY 
    OBJECT_NAME(i.[object_id]),
    i.name,
    i.index_id,
    s.user_seeks,
    s.user_scans,
    s.user_lookups,
    s.user_updates,
    i.type_desc,
    s.last_user_seek,
    s.last_user_scan,
    s.last_user_lookup,
    s.last_user_update
ORDER BY 
    [TableName], [IndexName];
';
 

No comments:

Post a Comment