Defrag Index and Pull fragmentation statistics in SQL Server
Pull fragmentation statistics:
SELECT
OBJECT_schema_NAME(a.OBJECT_ID)+'.'+OBJECT_NAME(a.OBJECT_ID) AS ObjectName,
a.OBJECT_ID AS ObjectID,
a.index_id AS IndexID,
b.name AS IndexName,
a.avg_fragmentation_in_percent AS PercentFragment,
a.fragment_count AS TotalFrags,
a.avg_fragment_size_in_pages AS PagesPerFrag,
a.page_count AS NumPages
FROM sys.dm_db_index_physical_stats(DB_ID('DB Name'),
NULL, NULL, NULL , 'DETAILED')
AS a
JOIN sys.indexes AS b
ON a.object_id = b.object_id
AND a.index_id = b.index_id
WHERE avg_fragmentation_in_percent > 0
ORDER BY ObjectName,PercentFragment DESC
OBJECT_schema_NAME(a.OBJECT_ID)+'.'+OBJECT_NAME(a.OBJECT_ID) AS ObjectName,
a.OBJECT_ID AS ObjectID,
a.index_id AS IndexID,
b.name AS IndexName,
a.avg_fragmentation_in_percent AS PercentFragment,
a.fragment_count AS TotalFrags,
a.avg_fragment_size_in_pages AS PagesPerFrag,
a.page_count AS NumPages
FROM sys.dm_db_index_physical_stats(DB_ID('DB Name'),
NULL, NULL, NULL , 'DETAILED')
AS a
JOIN sys.indexes AS b
ON a.object_id = b.object_id
AND a.index_id = b.index_id
WHERE avg_fragmentation_in_percent > 0
ORDER BY ObjectName,PercentFragment DESC
Defragment Index -- Rebuild or Reorganize
For slight level of fragmentation
ALTER INDEX IndexName
ON TableName REORGANIZE
ON TableName REORGANIZE
For severe fragmentation level
ALTER INDEX IndexNameON TableName REBUILD
or
ALTER INDEX IndexName
ON TableName REBUILD WITH (
FILLFACTOR = 90,
ONLINE = ON
)
ON TableName REBUILD WITH (
FILLFACTOR = 90,
ONLINE = ON
)