8.인덱스 설계

인덱스가 많아지면 insert update delete 시 성능 하락

선택도 높음: 남녀
선택도 낮음: 대한민국 성씨

(1)가장 중요한 두 가지 선택 기준

  • 조건절에 항상 사용되거나 . 자주 등장하는 컬럼들을 선정
  • '=' 조건으로 자주 조회되는 컬럼들을 앞쪽에 둔다.

(2)인텍스 설계는 공식이 아닌 전략과 선택의 문제

  • 고객수 100만
  • 상품 10만
  • 거래 검색 범위는 무작위

<검색조건1>
where 고객번호 = 1
and 거래일자 between '20090101' and '20090331'

<검색조건2>
where 고객번호호 = 'A'
and 거래일자 between '20090101' and '20090331'

<검색조건3>
where 고객번호 = 1
and 상품번호 = 'A'
and 거래일자 between '20090101' and '20090331'

<검색조건4>
where 거래일자 between '20090101' and '20090331'

인덱스 추가 요소

  • 쿼리 수행 빈도
  • 업무상 중요도
  • 클러스터링 팩터
  • 데이터량
  • DML 부하
  • 저장 공간
  • 인덱스 관리 비용 등

실제 인덱스 설계에선 partiion 기능을 사용하는것도 고려한 후 인덱스를 설계하는편이 바람직하다.
(단 Oracle 에선 partition 기능은 Enterprise Edition 에서만 사용 가능하며 해당 라이센스를 사도 partition 기능 은 유료 기능이라 해당 추가 팩을 구매하여야 한다.)

(3) 결합 인텍스 컬럼 순서 결정 시, 선택도 이슈

선택도가 액세스 효율에 영향을 주지 않는 경우

  • '=' 조건으로 항상 사용되는 컬럼들을 앞쪽에 위치

선택도가 '높은 컬럼' 을 앞쪽에 두는 것이 유리한 경우

Index Skip Scan은 선행 컬럼의 Distinct Value 개수가 적고,후
행 컬럼의 Distinct Value 개수가 많아야 효율적이다.

상황에 따라 유/불리가 바뀌는 경우

선택도가 '낮은 컬럼' 을 앞쪽에 두는 것이 유리한 경우

선택도가 낮은 컬럼을 '선택' 하는 것이 유리한 경우

(4) 소트 오퍼레이션을 생략하기 위한 컬럼 추가

  • 인덱스는 항상 정렬 상태를 유지

(5) 인덱스 설계도 작성

180~199