SQLServer

인덱스 조각화 확인 방법

하람윤슬아빠 2020. 1. 14. 13:52

테스트 환경

 - OS : Windows 2008 R2 DataCenter

 - DBMS : SQL Server 2012 Enterprise Edition + SP4

 - 참고문서 : https://docs.microsoft.com/ko-kr/previous-versions/sql/sql-server-2012/ms189858(v=sql.110)

 

내용

 

 - 인덱스 조각화 개요

SQL Server 데이터베이스 엔진에서는 기본 데이터에 삽입, 업데이트 또는 삭제 작업을 수행할 때마다 인덱스를 자동으로 유지 관리합니다. 이러한 수정이 거듭되면 시간이 흐름에 따라 인덱스의 정보가 조각화되어 데이터베이스 내에 흩어지게 될 수 있습니다. 이런 현상을 인덱스 조각화 라고 합니다.

조각화는 키 값을 기준으로 하는 인덱스의 논리적 페이지 순서가 데이터 파일 내의 물리적 순서와 일치하지 않을 때 나타납니다. 심하게 조각화된 인덱스는 쿼리 성능을 저하시키고 응용 프로그램의 응답을 늦출 수 있습니다.

 

 - 인덱스 조각화 확인 방법

SELECT top(10) object_name(a.object_id) as 'TableName',
a.index_id, b.name as 'IndexName', round(avg_fragmentation_in_percent, 2) as 'Fragmentation'
FROM sys.dm_db_index_physical_stats (DB_ID(N'AdventureWorks2012'), NULL, NULL, NULL, NULL) AS a
    JOIN sys.indexes AS b
        ON a.object_id = b.object_id AND a.index_id = b.index_id
order by Fragmentation desc
GO



 - 인덱스 재구성 방법

alter index [index name] on [table name] reorganize;

 

 

 - 인덱스 재작성 방법

alter index [index name] on [table name] rebuild;