index scan
Index Range Scan
선두 칼럼이 조건절에 존재할 때 사용할 수 있는 방식이다.
불가조건
인덱스를 정상적으로 범위 검색할 수 없는 이유는 인덱스 스캔 시작 지점을 찾을 수 없기 때문이다. 때문에 인덱스를 Range Scan하지 못하는 대표적인 경우는 다음과 같다.
- 인덱스 액세스 조건절 칼럼 가공
- LIK를 통한 중간값 조회
- 부정형 비교 조건일 때
소트 연산 생략
아래 공식에 따라 인덱스 구성 시 소트 연산이 생략 가능하다.
- ‘=’ 연산자로 사용한 조건절 컬럼 선정
- ‘=’ 연산자 후에 정렬 순서대로 칼럼 인덱스가 존재하여야한다.
- ORDER BY 절에 기술한 컬럼 추가
- 반드시 정렬할 순서대로 인덱스가 이어져 구성되어야한다.
- ‘=’ 연산자가 아닌 조건절 컬럼은 데이터 분포를 고려해 추가 여부 결정
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 시키는 방식.