Index Scan

xlwdn·2022년 10월 20일
0

index scan

Index Range Scan


선두 칼럼이 조건절에 존재할 때 사용할 수 있는 방식이다.

  • 선두컬럼의 값이 작을 때 효과적이다.

불가조건


인덱스를 정상적으로 범위 검색할 수 없는 이유는 인덱스 스캔 시작 지점을 찾을 수 없기 때문이다. 때문에 인덱스를 Range Scan하지 못하는 대표적인 경우는 다음과 같다.

  • 인덱스 액세스 조건절 칼럼 가공
  • LIK를 통한 중간값 조회
  • 부정형 비교 조건일 때

소트 연산 생략


아래 공식에 따라 인덱스 구성 시 소트 연산이 생략 가능하다.

  1. ‘=’ 연산자로 사용한 조건절 컬럼 선정
    1. ‘=’ 연산자 후에 정렬 순서대로 칼럼 인덱스가 존재하여야한다.
  2. ORDER BY 절에 기술한 컬럼 추가
    1. 반드시 정렬할 순서대로 인덱스가 이어져 구성되어야한다.
  3. ‘=’ 연산자가 아닌 조건절 컬럼은 데이터 분포를 고려해 추가 여부 결정

Index Skip Scan


  • 인덱스 선두 칼럼이 조건절에 없을 때 사용할 수 있는 스캔 방식.
  • 인덱스 선두 컬럼이 조건절에 있을 때도 사용할 수 있다.
  • index_ss 힌트로 유도할 수 있다.
  • IN LIST(INLIST ITERATOR)와 비슷하긴 하나, 같지 않으며 성능 면에선 index skip scan이 더 효율적이다.
    • use_concat 사용 시 union all로 변환되기에 오해할 수 있으나, union all은 in list 방식으로 처리된다.
  • 최선두 칼럼의 값이 적다 할지라도 이후 칼럼의 값이 많을 때에도 효과적이다.
    • ex) 인덱스가 승인 요청 일자 + 승인 요청Id 이고,
      • where 승인 요청 일자 = TO_CHAR(sysdate -6, “YYYYMMDD”) and 승인 요청 id = :reqr_id; 일 때

사용되는 예시


  • between
  • 선두 칼럼의 값이 많을 때 사용이 권장된다.

IN-LIST ITERATOR


In list 연산을 ‘=’ 연산으로 바꾸어 union all 시키는 방식.

  • 이 방법 사용 시 정렬 순서가 깨진다.

0개의 댓글