SQL Server -Defragment Indexes


Problem: Many a times you need to defragment indexes on SQL server. Following query is quite handy for doing this task.

Solution:

SELECT 'Alter index ' + i.NAME + ' on '
 + Quotename(s.NAME) + '.' + Quotename(o.NAME) + CASE WHEN
 stats.avg_fragmentation_in_percent >=60 THEN ' rebuild ' ELSE
 ' reorganize' END
 FROM   sys.Dm_db_index_physical_stats(Db_id(), NULL, NULL, NULL, 'LIMITED') AS
 stats,
 sys.objects AS o,
 sys.schemas AS s,
 sys.indexes AS i
 WHERE  o.object_id = stats.object_id
 AND s.schema_id = o.schema_id
 AND i.object_id = stats.object_id
 AND i.index_id = stats.index_id
 AND stats.avg_fragmentation_in_percent >= 20
 AND stats.page_count >= 1000
 ORDER  BY stats.avg_fragmentation_in_percent DESC,
 stats.page_count DESC