[MS-SQL] 인덱스 조각모음 : re-indexing
데이터를 입력,수정,삭제를 하다보면 인덱스에 조각화가 일어난다.
조각화가 많아지면 성능이 느려진다.
그럼, 다시 정리를 해줘야하는데.
인덱스를 다시 작성하는 방법에는
- DBCC DBREINDEX
- DBCC INDEXDEFRAG
- ALTER INDEX ALL ON 테이블명 REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90)
이 있다..
여기에서 속도도 가장 빠르고 효율적인것이..
MS-SQL 2005 이상에서 지원하는 아래의 쿼리다.
ALTER INDEX ALL ON 테이블명 REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90)
하지만 우리는 수많은 테이블을 하나씩 할만큼 여유가 있지 않다.
다음은 해당 데이터베이스의 모든 테이블의 인덱스를 재정리하는 쿼리다.
DECLARE @i int, @sql varchar(1000) DECLARE @tablename varchar(1000),@ownerName varchar(1000) SET @i = 1 DECLARE DB_Cursor CURSOR FOR SELECT TABLE_SCHEMA, TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' ORDER BY TABLE_SCHEMA, TABLE_NAME OPEN DB_Cursor FETCH NEXT FROM DB_Cursor INTO @ownerName, @tablename WHILE @@FETCH_STATUS = 0 BEGIN SET @sql = 'ALTER INDEX ALL ON ' + @ownerName + '.' + @tablename + ' REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90) ' EXEC (@sql) PRINT CONVERT(VARCHAR, @i) + '__' + @ownerName + '.' + @tablename + '............ OK' SET @i = @i + 1 FETCH NEXT FROM DB_Cursor INTO @ownerName, @tablename END CLOSE DB_Cursor DEALLOCATE DB_Cursor