오라클 성능 고도화 원리와 해법 II (2016년)
인덱스 설계 0 0 4,581

by 구루비 인덱스설계 결합인덱스 [2017.03.25]


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

"구루비 주주클럽 스터디모임" 에서 2016년에 "오라클 성능 고도화 원리와 해법 II " 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3336

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입