* 인덱스 유일 스캔 (INDEX UNIQUE SCAN)
- 대부분 단 하나의 ROW를 추출
- 전체조건을 만족할 경우 옵티마이져는 인덱스 유일 스캔을 선택
- 인덱스가 기본키 이거나, 유일 인덱스(UNIQUE INDEX)로 구성
- 인덱스를 구성하는 모든 컬럼들이 모두 조건절에서 '='(EQUAL) 비교
- 데이터베이스 링크(DATABASE LINK) 사용시 힌트로 적용
- 힌트는 INDEX(TABLE_ALIAS INDEX_NAME) 힌트 적용
* 인덱스 범위 스캔 (INDEX RANGE SCAN)
- 추출되는 ROW는 INDEX 구성 컬럼의 정렬순서와 동일
- ORDER BY 절이 있더라도 추가 정렬 작업이 필요없을 수도 있음.
- NON UNIQUE INDEX, UNIQUE INDEX
- 하나이상의 인덱스 선행컬럼에 상수나 변수로 조건이 부여되어야 함.
- 비교연산자는 '=, <, <=, >, >=, BETWEEN, LIKE'등
- 단, LIKE연산자 사용시 '%ABC'의 경우 범위 스캔 불가
- COL1+COL2+COL3에서 COL2 조건이 없는 경우
- 힌트는 INDEX(TABLE_ALIAS INDEX_NAME) 힌트 적용
* 인덱스 역순 범위 스캔 (INDEX RANGE SCAN DESCENDING)
- 인덱스를 역순으로 스캔
- 기타 사항에 대하여는 인덱스 범위 스캔과 동일
- 가장 최근에 발생한 내용을 처리하기 위한 경우 사용
- 부분범위 처리 (Partial Range)를 위해 사용
- ORDER BY .. DESC 시 발생
- INDEX_DESC(TABLE_ALIAS INDEX_NAME) 힌트 사용시 발생
* 인덱스 스킴 스캔 (INDEX SKIP SCAN)
- ORACLE 9i 부터 적용
- Cardinality가 낮은 선형 컬럼 + 높은 후행칼럼으로 구성된 인덱스일수록 큰 효과
- 내부적으로 선행 컬럼 값의 Distinct Value 만큼의 Logical Sub-Index로 나눠서 SCAN한다.
- Analyze 되어 있는 오브젝트에 적용된다.
- 힌트는 INDEX_SS, INDEX_SS_ASC, INDEX_SS_DESC 가 있다.
* 인덱스 전체 스캔 (INDEX FULL SCAN)
- 전제조건
- 조건절에서 인덱스 컬럼에 적어도 하나이상 사용되었을때.
- 반드시 선행컬럼이 사용될 필요는 없음.
- 쿼리 내 사용된 어떤 테이블들의 모든 컬럼들이 인덱스에 존재
- 인덱스 컬럼 중 최소한 NOT NULL인 컬럼이 최소 하나는 존재
- ORDER BY 절에 사용될 경우 인덱스를 사용하여 SORT가 가능할 때
- SINGLE BLOCK I/O 수행
* 인덱스 고속 전체 스캔 (INDEX FAST FULL SCAN)
- 인덱스 스캔만을 하며, 테이블 엑세스는 하지 않음.
- MULTI BLOKC I/O 를 수행
- BITMAP INDEX에서는 적용 불가
- 반드시 선행 컬럼이 사용될 필요는 없음
- 연관된 힌트는 INDEX_FFS, NO_INDEX_FFS 가 있다.
출처 : 새로쓴 대용량 데이터베이스 솔루션 vol.1