본문 바로가기

운영/압축

NonClustered Index 자동 압축 스크립트 만들기

MS SQL Enterprise에서 지원되는 데이터 압축에서 NonClustered Index의 Page 압축을 손쉽게 하기 위해 스크립트를 자동으로 만들고 싶습니다.

 

1. NonClustered Index 압축 스크립트 만들려고 합니다.

- MS SQL 2008 버전 이후에서 압축을 지원합니다. 

- 특정 테이블의 모든 NonClustered Index를 압축하는 스크립트입니다. 

- 테이블의 정보를 가지고 동적 쿼리를 사용하여, 압축을 진행합니다.

DECLARE @TABLENAME VARCHAR(100)
DECLARE @INDEXNAME VARCHAR(100)
DECLARE @SQL NVARCHAR(MAX)
 
DECLARE INDEX_CURSOR CURSOR FOR
SELECT T.NAME,
        I.NAME
FROM sys.indexes AS I
JOIN sys.tables AS T ON I.OBJECT_ID=T.OBJECT_ID
WHERE T.NAME IN('테이블이름')
        AND I.TYPE_DESC='NONCLUSTERED'
        AND I.IS_DISABLED=0

OPEN INDEX_CURSOR
FETCH NEXT FROM INDEX_CURSOR INTO @TABLENAME,@INDEXNAME
WHILE (@@FETCH_STATUS=0)
BEGIN
        SET @SQL=N'ALTER INDEX ['
                +@INDEXNAME
                +'] ON ['
                +@TABLENAME
                +'] REBUILD WITH ( DATA_COMPRESSION = PAGE, 
                        ONLINE=ON,MAXDOP=8)'

        EXEC (@SQL)
 
        FETCH NEXT FROM INDEX_CURSOR INTO @TABLENAME,@INDEXNAME
END

CLOSE INDEX_CURSOR
DEALLOCATE INDEX_CURSOR