인덱스 설계에서 가장 중요한 두 가지 선택 기준
- 조건절에 하상 사용되거나, 자주 등장하는 컬럼
- '=' 조건으로 자주 조회되는 컬럼들을 앞쪽에 둔다.
스캔 효율성 이외의 판단 기준
- 쿼리 수행 빈도
- NL 조인의 Inner 쪽 테이블로서 자주 엑세스되는지도 중요한 판단 기준
- 업무상 중요도
- 클러스터링 팩터
- 데이터량
- DML 부하 (=기존 인덱스 개수, 초당 DML 발생량, 자주 갱신되는 컬럼 포함 여부)
- 저장 공간
- 인덱스 관리 비용
- ( 실무적으로는 파티션 설계를 먼저 진행하거나
최소한 인덱스 설계와 병행하는 것이 바람직하다. )
결합 인덱스 컬럼 순서 결정 시, 선택도 이슈
- '=' 조건으로 항상 사용되는 컬럼들을 앞쪽에 위치시켰다면, 그 중 선택도가 낮은 것을
앞쪽에 두려는 노력은 의미 없는 것이거나 오히려 손해일 수 있다.
선택도가 '높은 컬럼'을 앞쪽에 두는 것이 유리한 경우
- 선택도가 높은 컬럼을 앞에 두는 것은 9i 부터 제공되는 Index Skip Scan을
활용할 수 있어 유리하다.
- index skip scan이 아니더라도 In-list로 값을 제공함으로써 쉽게 튜닝할 여지가 생긴다.
- 인덱스 압축 기능을 고려하더라도 선택도가 높은 컬럼을 앞쪽에 두는 것이 유리하다.
( 선택도가 높은 컬럼을 앞쪽에 두어야 인덱스 압축률이 더 좋아지기 때문이다. )
선택도가 '낮은 컬럼'을 앞쪽에 두는 것이 유리한 경우
- 범위검색 조건을 사이에 둔 컬럼끼리는 선택도가 낮은 컬럼을 앞쪽에 두는 것이 유리하다
소트 오퍼레이션을 생략하기 위한 컬럼 추가
- 인덱스는 정렬 상태를 유지하므로 order by , group by를 위한 소트 연상을 생략할 수 있다.
- 인덱스를 이용해 소트 연산을 대체하려면, 인덱스 컬럼 구성과 같은 순서로 누락 없이
order by절에 기술해 주어야 한다.
단, 인덱스 구성 컬럼이 조건절에서 '=' 연산자로 비교된다면, 그 컬럼은 order by 절에서
누락되거나 인덱스와 다른 순서로 기술하더라도 상관 없다.
( 이런 규칙은 group by 절에도 똑같이 적용된다. )
- 통계정보를 기반으로 비용을 계산한 결과 옵티마이저가 Table Full Scan을 선택하거나
다른 인덱스를 선택한다면 정렬 작업은 별로도 수행된다.
- 인덱스 컬럼중 하나라도 범위 조건으로 기술 되면 order by는 순서대로 기술해야 한다.
'ORACLE > SQLP' 카테고리의 다른 글
성능고도화 2-1. Nested Loops 조인 (0) | 2016.12.26 |
---|---|
성능고도화 1-9 비트맵 인덱스 (0) | 2016.12.26 |
성능고도화 1-7. 인덱스 스캔 효율 (0) | 2016.12.26 |
성능고도화 1-6 IOT 클러스터 테이블 활용 (0) | 2016.12.26 |
성능고도화 1-5. 테이블 random 엑세스 최소화 튜닝 (0) | 2016.12.26 |