SQL Server/SQL Server Tip

인덱스 생성 순서에 따른 내부 작업 변화

SungWookKang 2015. 7. 17. 09:33
반응형

인덱스 생성 순서에 따른 내부 작업 변화

 

인덱스에는 여러 종류가 있지만 가장 많이 사용하는 부분이 클러스터 인덱스와 넌-클러스터 인덱스 이지 않을까 생각 합니다.

 

그렇다면 클러스터 인덱스와 넌-클러스터 인덱스가 있을 때 인덱스 생성 순서에 따라 성능 문제가 발생할까? 입니다. 좀더 정확히 말하면 인덱스 생성순서에 따라 내부적으론 어떻게 작동할까 입니다.

 

결론부터 말하면 넌-클러스터 인덱스가 있는 상태에서 클러스터형 인덱스를 추가하면 RID 값 대신 클러스터형 인덱스의 키 값을 기존 인덱스가 내부적으로 재구성 됩니다.

 

다음 예제를 통해서 알아 보도록 하겠습니다.

 

  • 전체 코드

BEGIN TRY

    DROP TABLE TBL_X

END TRY BEGIN CATCH END CATCH

GO

 

CREATE TABLE TBL_X (NUM INT, NAME NVARCHAR(50))

GO

 

INSERT INTO TBL_X VALUES (1, 'HTTP://SQLMVP.KR')

INSERT INTO TBL_X VALUES (3, 'HTTP://SQLMVP.KR')

INSERT INTO TBL_X VALUES (2, 'HTTP://SQLMVP.KR')

INSERT INTO TBL_X VALUES (5, 'HTTP://SQLMVP.KR')

INSERT INTO TBL_X VALUES (4, 'HTTP://SQLMVP.KR')

GO

 

SELECT * FROM TBL_X

 

SET STATISTICS PROFILE ON

 

CREATE INDEX IX_TBL_X_NUM ON TBL_X (NUM)

GO

 

CREATE CLUSTERED INDEX CI_TBL_X_NUM ON TBL_X (NUM)

GO

 

DROP index TBL_X.CI_TBL_X_NUM

 

SET STATISTICS PROFILE OFF

 

테이블을 생성하고 데이터를 입력 합니다.

 

 

SET STATISTICS PROFILE ON 을 실행하고 넌-클러스터 인덱스를 생성 합니다. 아래 그림처럼 넌-클러스터가 생성되는 과정을 확인 할 수 있습니다.

 

 

그리고 클러스터 인덱스를 생성해 보도록 하겠습니다. 넌-클러스터 인덱스와는 다르게 2개의 실행계획이 나타 납니다. 실행계획을 보면 처음에 클러스터 인덱스를 생성합니다. 두 번째 실행 계획을 보면 클러스터 인덱스 (CI_TBL_X_NUM)를 읽어서 넌-클러스터 인덱스(IX_TBL_X_NUM)를 재구성 했음을 확인 할 수 있습니다.

 

 

 

이번에는 클러스터 인덱스를 삭제해 보도록 하겠습니다. 넌-클러스터 인덱스가 클러스터 인덱스의 키 값 대신 테이블을 스캔 하여 RID값을 갖도록 기존 인덱스가 재구성 되는 것을 확인 할 수 있습니다.

 

 

그렇다면 클러스터 인덱스를 생성하고 넌-클러스터 인덱스를 생성하면 어떻게 될까요?

꼭 직접 해보시길 바랍니다. ^^

 

2012-08-03 / 강성욱 / http://sqlmvp.kr

 

반응형