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

 

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

 

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

 

결론부터 말하면 넌-클러스터 인덱스가 있는 상태에서 클러스터형 인덱스를 추가하면 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값을 갖도록 기존 인덱스가 재구성 되는 것을 확인 할 수 있습니다.

 

 

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

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


 

강성욱 / jevida@naver.com
Microsoft SQL Server MVP
Blog : http://sqlmvp.kr
Facebook : http://facebook.com/sqlmvp




No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 451
1626 SSMS 최근 사용한 파일에 대한 설정 변경 jevida(강성욱) 2015.03.25 3699
1625 SSMS 상위 행 선택 및 수정 행 변경 jevida(강성욱) 2015.03.25 7103
1624 SSMS에서 변경 스크립트 자동 생성 jevida(강성욱) 2015.03.25 4110
1623 SSMS 명령 단축키 설정 jevida(강성욱) 2015.03.25 6671
1622 Min / Max Server Memory 설정 jevida(강성욱) 2015.03.24 14027
1621 Tempdb 장애 유형과 해결방안.(디스크 공간 및 경로 문제) jevida(강성욱) 2015.03.24 5363
1620 SQL Server ErrorLog에 백업 로그 남지기 않기 jevida(강성욱) 2015.03.24 4088
1619 SQL Server의 Errorlog는 어디에 저장 될까? jevida(강성욱) 2015.03.24 3783
1618 통계(Statistics) jevida(강성욱) 2015.03.23 5757
1617 활성 트랜잭션 찾기 jevida(강성욱) 2015.03.23 4068
1616 ForwardedRecord (행 이동에 대한 포워드) jevida(강성욱) 2015.03.23 3415
» 인덱스 생성 순서에 따른내부 작업 변화 jevida(강성욱) 2015.03.23 5092
1614 SQL Server 성능 테스트 프로그램 minsouk 2015.01.17 6024
1613 extended events 를 이용한 wait 분석 minsouk 2014.07.25 6275
1612 동일기준에대해 복수컬럼 PIVOT 사용하기 열이 2014.06.27 21653
1611 SELECT / UPDATE / INSERT 쿼리를 쉽게 만들자... [1] Hisory 2014.05.12 10888
1610 ssms 자동 언어 변경이 되면, 이렇게 설정하세요 minsouk 2014.04.27 9584
1609 [QUERY] 그룹 번호 만들기 이스트럭(강동운) 2014.04.11 8767
1608 [QUERY]연승을 구해보자! [2] 이스트럭(강동운) 2014.04.11 9619
1607 VLF 이스트럭(강동운) 2014.04.11 8107





XE Login