본문 바로가기

프로젝트/고민

인덱스 튜닝으로 성능 개선하기

인덱스 튜닝을 하게된 계기

상품 조회는 현재 시스템의 핵심 기능중 하나이다. 그렇기 때문에 빠른 성능을 제공하는 것은 필수적이라고 생각이 들어 인덱스 튜닝을 계획했다.

 

 

적용할 필드 정하기

인덱스를 적용하기에 앞서 어떤 컬럼에 적용할지 결정해보자. 컬럼은 다음과 같다

 

 

검색시 주로 상품 이름 + 내용의 like문을 사용하며 where절에 가격을 조건으로 하는 요청이 많이 들어올 것이라 생각이 들었고 다른 로우의 값과 많이 겹치지 않기 때문에 위의 필드 중에서 나는 price에 인덱스를 걸었다.

 

 

이제 인덱스 튜닝을 진행해 보자

 

인덱스 튜닝 전

실행계획

다음은 인덱스 튜닝을 하기 전 실행계획이다.

 

 

간단히 살펴보면 "items" 테이블을 사용하여 처리되었고, "ALL" 접근 방식을 사용하였으며, 인덱스를 사용하지 않았다는 것을 알 수 있다. 또한 약 93만개의 row를 스캔한다는 것을 확인할 수 있다.

 

조회시 소모 시간

 

위의 쿼리에 대해 총 562ms 걸린 것을 확인할 수 있다.

 

인덱스 튜닝 후

실행계획

다음은 인덱스 튜닝을 한 후 실행계획이다.

 

간단하게 분석하자면 idx_price 인덱스를 참조하고 총 약 8만개의 row를 탐색하는 것을 확인할 수 있다.

 

 

조회시 소모시간

 

562ms -> 297ms 약 2배 가까이 성능이 개선된 것을 확인할 수 있다.

 

생성시 소모시간

 

 

두개의 결괏값은 각각 index를 적용했을 때와 적용하지 않았을 때에 대한 결과다. 이론상으로는 index를 적용하면 데이터 삽입, 수정, 삭제시 비용이 많이 소모된다고 했는데 예상과는 다르게 별 차이가 발생하지 않았다. 내 생각이지만 하드웨어가 많이 발달해서 이러한 결과가 나온 것 같다.

 

느낀점

성능 개선을 위해 인덱스 튜닝을 처음 적용해봤다. 이론으로만 알고있던 내용이었지만 실제 적용해보니 감회가 새롭다. 또한 생성작업도 직접 해보니 배웠던 내용과는 다른 결과를 얻을 수 있었고 실제에서는 더욱 복합적인 상황이 겹쳐 예상치 못한 결과를 얻을 수 있다는 생각이 들었다. 결국 다양한 경험을 해보는게 중요하다고 느껴졌다.