Skip to main content

Show table index fragmentation in T-SQL.

select t1.object_id,
    OBJECT_NAME(t1.object_id) as ObjectName,
    t2.fill_factor,
    t2.name,
    index_type_desc,
    avg_fragmentation_in_percent,
    avg_record_size_in_bytes,
    'ALTER INDEX ALL ON dbo.' + OBJECT_NAME(t1.object_id) + ' REBUILD WITH (FILLFACTOR = 80, SORT_IN_TEMPDB = ON, STATISTICS_NORECOMPUTE = ON); RAISERROR (N''Indexes rebuilt succesfully on ' + OBJECT_NAME(t1.object_id) + ''', 10, 1, 1) WITH NOWAIT;' as RebuildScript
from sys.dm_db_index_physical_stats(DB_ID(), null, null, null , null) t1
    nner join sys.indexes t2 on t1.object_id = t2.object_id and t1.index_id = t2.index_id
where avg_fragmentation_in_percent > 20
order by 2 desc;