Index Range Scan
Index Range Scan Descending
hint : Index_desc
- B*Tree인덱스의 가장 일반적이고 정상적인 형태
- 필요한 범위만 스캔
- 인덱스를 구성하는 선두 컬럼을 조건절에 사용해야한다.
- 성능은 인덱스 스캔범위, 테이블 엑세스 횟수를 얼마나 줄일수있느냐로 결정(인덱스탄다고끝이아님)
- 인덱스 사용이 불가능 하거나 범위 스캔(Range Scan)이 불가능 한 경우 ?
- 인덱스 컬럼의 가공 (좌변 가공)
- Null 검색
- Null 검색의 경우, not null인 행이 있어 ” null + 값” 인경우 인덱스 range scan 가능
- 묵시적 형변환
- 컬럼과 상수의 Data Type이 상이한 경우변환 불가능하면 에러 발생문자 = 숫자 (문자 > 숫자)날짜 = 숫자 (에러)
- 문자 = 날짜 (문자 > 날짜)
- 단, Like 연산자의 경우 반대로 숫자 → 문자로 변경
- 문자 → 순자로 변환 후 비교
- 부정검색 (~아니다)
Null 검색에 따른 Index Range Scan 가능 여부
인덱스 구성 | CASE1 WHERE 고객번호 IS NULL |
CASE2 WHERE 고객번호 IS NULL AND 고객명 = '홍길동' |
설명 |
---|---|---|---|
고객번호 | X | X | Null은 인덱스를 만들지 않는다. |
고객번호 + 고객명 (Nullable) |
X | O | CASE1: 두 컬럼 모두 Null일 경우 인덱스에서 검색 불가 CASE2: Null + 홍길동 데이터는 인덱스에 데이터 생성 |
고객번호 + 고객명 (고객명 Not Null) |
O | O | CASE1: 두 컬럼 모두 Null인 케이스가 없기 때문에, 인덱스 생성 CASE2: Null + 홍길동 데이터는 인덱스에 데이터 생성 |
Index Full Scan
hint : Index_fs(X), Index
- 조회 조건의 인덱스가 있으나, 선두 컬럼이 아니지만,
- 옵티마이저가 인덱스 활용에서 이익이 있다고 판단할 경우.
- 적당한 인덱스가 없을 경우.
- 최종 결과 값이 적을 때 Full Table Scan 보다 Index Full Scan이 효율적, 최종 결과값이 많다면 Full Table Scan이 효율적
Index Unique Scan
- 수직적 스캔만 발생
- Unique 인덱스 인 경우
- equal (=) 조건인 경우
Index Skip Scan
hint : index_ss
- 조회 조건이 인덱스 선두 컬럼이 아니고,
- 인덱스 선두 컬럼의 distinct 가 매우 낮은 경우
- 인덱스 선두 컬럼이 Between, Like, 부등호 일 때도 사용할 수 있음.
Index Fast Full Scan
hint : Index_ffs
- 전체 Index Full Scan
- Multi-Block I/O
- 파라미터의 db_file_multiblock_read_count 개수만큼 한번에 Read
- Index 논리적 순서와 무관하게 물리적 순서대로 Read
- 빠른 속도
- 결과는 인덱스 키 컬럼 순서와 무관

구독해주세요 ~
'Database' 카테고리의 다른 글
인덱스 스캔 효율 (0) | 2025.04.04 |
---|---|
오라클 DBMS 구조 (0) | 2025.04.04 |
인덱스와 조인 #1 (0) | 2025.04.04 |
HOT update (0) | 2025.04.04 |
Oracle vs PostgreSQL (0) | 2025.04.04 |