본문 바로가기

운영/압축

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

728x90

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
728x90