Labels

Sunday, October 16, 2011

Logic to Rebuild Or ReIndex the Indexes Dynamically


SET NOCOUNT ON
DECLARE@Index_Name NVARCHAR(150), @FragPercent FLOAT, @RowCount INT, @ExecCmd NVARCHAR(500) = '', @EntityName NVARCHAR(100)
SET@EntityName = '@TableName'
DECLARE@IndexInfo TABLE (RwNo INT IDENTITY(1,1), Index_ID INT , Index_Name NVARCHAR(150), FragmentationPercentage FLOAT)
INSERTINTO @IndexInfo
SELECTa.index_id, name, avg_fragmentation_in_percent
FROMsys.dm_db_index_physical_stats (DB_ID(), OBJECT_ID(@EntityName), NULL, NULL, NULL) AS a
JOIN sys.indexes AS b ON a.OBJECT_ID = b.OBJECT_ID AND a.index_id = b.index_id
SET
@RowCount = (SELECT COUNT(*) from @IndexInfo)
--SELECT * FROM @IndexInfo
WHILE
( @RowCount > 0)
BEGIN
SELECT@Index_Name = Index_Name, @FragPercent = FragmentationPercentage FROM @IndexInfo WHERE RwNo = @RowCount
SELECT
@ExecCmd = CASE WHEN @FragPercent > 5 AND @FragPercent <= 40 THEN 'ALTER INDEX ' + @Index_Name + ' ON ' + @EntityName + ' REORGANIZE'
WHEN @FragPercent > 40 THEN 'ALTER INDEX ' + @Index_Name + ' ON ' + @EntityName + ' REBUILD'
--ELSE ''
END
EXEC
(@ExecCmd)
SET
@RowCount = @RowCount - 1
END

No comments:

Post a Comment