본문 바로가기
IT/MSSQL

[MSSQL] 복합 인덱스 성능 테스트

by 베베야 2021. 3. 26.
728x90

오늘은 인덱스가 있는 테이블과 없는 테이블의 실행계획 확인해서 성능을 비교해보고
복합 인덱스를 사용해서 추가적인 성능 테스트도 해보도록 하겠습니다.

 

인덱스 테스트 사전 준비

테이블 생성
데이터를 넣을 EMP 테이블을 생성하도록 하겠습니다.

CREATE TABLE EMP
(
empno varchar(10),
empday varchar(8)
)


데이터 삽입
테스트를 위한 데이터 31,966개를 넣어보겠습니다.

insert into emp values ('30001','43831');
insert into emp values ('29999','43831');
insert into emp values ('30002','43832');
insert into emp values ('29998','43830');
insert into emp values ('30003','43833');
중략....
insert into emp values ('45982','59812');
insert into emp values ('14018','27850');
insert into emp values ('45983','59813');
insert into emp values ('14017','27849');

 

 

인덱스 테스트

인덱스는 책의 목차와 같은 기능을 하여 원하는 정보를 바로 찾을 수 있도록 도와주는 역할을 합니다.
현재 생성한 EMP 테이블에는 테스트를 위해서 인덱스를 생성하지 않았습니다.
(인덱스 확인은 sp_helpindex 테이블명으로 확인이 가능합니다.)

인덱스 실행계획에는 table scan과 index seek 가 있습니다
index seek가 인덱스를 찾아서 실행된 형태이기 때문에 성능면에서 뛰어납니다.

1. 2개의 쿼리의 실행계획을 비교해 보겠습니다.
동일한 처리비용이 계산되는 것을 볼 수 있습니다.

--테이블 조회
select empno from emp where empno<'20000' order by empno
select empno,empday from emp where empno<'20000' order by empno



2. empno 칼럼에 NONCLUSTERED 인덱스를 생성해 보겠습니다.

--인덱스 생성
CREATE NONCLUSTERED INDEX empno1 ON emp(empno);

--테이블 조회
select empno from emp where empno<'20000' order by empno
select empno,empday from emp where empno<'20000' order by empno

empno에 생성된 인덱스를 활용해서 첫 번째 쿼리가 index seek로 실행되었고 비용이 두 번째 쿼리에 비해서 엄청나게 좋아진 것을 볼 수 있습니다.


3. 이번에는 두번째 쿼리 문도 성능 향상을 위한 인덱스를 생성해 보겠습니다.
select 절에 2개의 칼럼을 사용하고 있기 때문에 복합 인덱스를 생성해 줘야 합니다. 
(여기서 주의해야 할 점은 칼럼의 순서도 맞춰 주셔야 합니다.)

--인덱스 생성
CREATE NONCLUSTERED INDEX emp2 ON emp(empno,empday);

--테이블 조회
select empno from emp where empno<'20000' order by empno
select empno,empday from emp where empno<'20000' order by empno

 

복합 인덱스를 생성해서 두 번째 쿼리의 실행계획이 index seek로 나오는 것을 확인할 수 있습니다.


이상으로 인덱스를 활용한 쿼리 성능을 향상하는 튜닝 방법에 대해서 알아보았습니다.

반응형
그리드형

댓글