인덱스 설계에서 가장 중요한 두 가지 선택 기준 

 - 조건절에 하상 사용되거나, 자주 등장하는 컬럼 

 - '=' 조건으로 자주 조회되는 컬럼들을 앞쪽에 둔다. 


스캔 효율성 이외의 판단 기준 

  - 쿼리 수행 빈도 

  - 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는 순서대로 기술해야 한다. 

+ Recent posts