인덱스는 왜 사용하나

인덱스를 사용하면 좋을 곳

  1. 빈번한 검색 작업
  2. 빈번한 조인 작업
  3. 빈번한 정렬 작업
  4. 빈번한 범위 검색
    1. BETWEEN, >, < 와 같은 범위 검색 연산을 자주 수행하는 경우
  5. 부정 연산 및 패턴 검색
    1. NOT 연산, LIKE와 같은 패턴 검색을 수행하는 경우
  6. 빈번한 집계 함수 사용
    1. SUM, AVG, COUNT와 같은 집계 함수를 사용하는 경우 해당 열에 인덱스를 생성하면 집계 연산이 좀 빨라진다고 함

우리의 Case에서는?

<aside> ❓ 쿼리 성능 지표 Query time : 쿼리 처리 시간 Lock_time : lock이 걸린 횟수 row_sent : 조회 결과의 Row 수 row_examined : 조회 대상의 Row 수

</aside>


(기본/추가)옵션 조회

select
	id, name, image, pc_detail_image as pc_image, mobile_detail_image as mobile_image, category, choice_ratio, use_count
from trims_options
	join options
  on (
      trims_options.option_id = options.id and
	    trims_options.trim_id = #{trimId} and
	    trims_options.option_type = 'default'
  )
order by 
	option_id;

인덱스 설정

CREATE INDEX trims_options_idx ON trims_options(option_id, trim_id, option_type);

인덱스 적용 전

인덱스 적용 전

인덱스 적용 후

인덱스 적용 후

→ 인덱스를 탔는데 오히려 쿼리코스트가 증가했다. 6가지 경우 모두 테스트해봄