본문 바로가기

Database/이론

SQL 인덱스 조각모음(구성/작성)을 CLUSTERED/NONCLUSTERED 를 비교하여 성능 비교

NONCLUSTERED INDEX와 CLUSTERED INDEX를 따로 하나씩생성해놔야한다.

 

*NON CLUSTERED 할때 CLUSTERED인덱스는 삭제해놓고 하고 

반대도 마찬가지이다.

 

CREATE CLUSTERED INDEX
	PK_COLUM_IDX
ON
	COLUMTABLE(IDX)


CREATE NONCLUSTERED INDEX
	PK_COLUM_IDX
ON
	COLUMTABLE(IDX)

위의 코드로 해도 된다.

 

 

 

 

 

 

테이블의 쿼리문 3개를 준비했다.

해당 쿼리문으로 성능 테스트를 할것이다.

 

 

 

 

 

 

 

프로파일러를 켜고,

아래와 같은 항목이 나오게 셋팅한다(STANDARD- 이벤트: TSQL제외 전원해제, TSQL에서 아래 항목만 남길것)

 

 

 

NONCLUSTERED든 CLUSTERED든 어떤것을 먼저실행해도 상관 없다.

실행을 누르고 위의 쿼리문을 하나씩 실행시키면 총 6줄이 뜬다 (각 2줄-순서대로)

 

 

 

NONCLUSTERED/CLUSTERED별로 위의 내용을 정리해서 엑셀에 모아 둘 것이다.

 

각각

처음엔 기본설정대로 돌리고,

 

그 후엔

1. 작성/구성 둘다 한번씩 돌리기

2. 작성만 돌리기

3. 구성만 돌리기

이렇게 각각 실행한다. 프로파일러는 매번 새로 껐다가 실행하여 앞의 6줄을 확인한다.

1,2,3 번을 실행하는동안 다시 구성,작성을 돌리기전에 일부러 쿼리문을 여러번 실행시켜 구성과 작성의 차이를 벌려놓는다 (디스크 조각을 깨놓는다)

 

 

 

 

그럼 아래와 같은 결과가 나온다.

 

 

첫번째

 

 

 

두번째

 

 

차이가 같지 않은것을 알수 있다.

이렇게 성능차이가 나게된다.

 

 

 

 

정리

-- INDEX~
NONCLUSTERED INDEX가 조각모음이 더 잘난다.

NONCLUSTERED INDEX는 특정범위를 찍었을 때 더 좋고
CLUSTERED INDEX는 범위를 정한경우 더 좋다

 

 

 

구간이나 특정 숫자를 집어서 출력하는 거니까 논클러스터가 빠르게 되고, 두번째가 사실 맞게 나오는것이다.

 

컨텍스스위치가 일어나 삑사리가 나거나,

상황에따라 스레드가 간섭하면 빠르다가 느려지고 하는부분도 있어서 

100% 논/일반 클러스터를 믿지 못한다.

 

 

상황마다 유동적인것으로 봐야하겠다.