본문 바로가기
데이타베이스

[ORACLE] Index Scan 종류

by hs_seo 2015. 8. 4.

Index Range Scan

인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후에 리프 블록을 필요한 범위만 스캔하는 방식

B-Tree 인덱스의 가장 일반적이고 정상적인 액세스 방식

인덱스를 스캔하는 범위를 얼마만큼 줄일 수 있느냐와 테이블로 액세스하는 횟수를 얼마만큼 줄일 수 있느냐

인덱스를 구성하는 선두 컬럼이 조건절에 사용되어야 index Range Scan 가능

Index Range Scan 과정을 거쳐 생성된 결과집합은 인덱스 컬럼 순으로 정렬, order by 연산을 생략하거나 min/max값을 빠르게 추출 가능

between, like, 부등호 조건 처리

 

Index Full Scan

수직적 탐색 없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식

최적의 인덱스가 없을 때 차선으로 선택

효용성: 인덱스 선두 컬럼이 조건절에 없으면 Table Full Scan을 고려하나, Table Full Scan 보다 I/O를 줄일 수 있거나 정렬된 결과를 쉽게 얻을 수 있을 경우 선택

인덱스를 이용한 sort 연산 대체

 

 

Index Unique Scan

수직적 탐색만으로 데이터를 찾는 방식

작동시점: unique 인덱스를 통해 ‘=’ 조건으로 탐색하는 경우

중복되지 않는 unique한 값을 = 조건으로 검색할 경우 데이터 한 건을 찾는 순간 더 이상 탐색하지 않음

 

Index Skip Scan

조건절에 빠진 인덱스 선두 컬럼의 distinct value 개수가 적고 후행 컬럼의 distinct value 개수가 많을 때 유용

루트 또는 브랜치 블록에서 읽은 컬럼 값 정보를 이용해 조건에 부합하는 레코드를 포함할 가능성이 있는 리프 블록만 골라서 액세스 하는 방식

첫 번째 리프 블록과 마지막 리프 블록은 항상 방문

인덱스의 전체 조건을 이용하지 않고 부분적으로 이용할 경우 사용

/*+ index_ss(emp) */

 

 

Index Fast Full Scan

인덱스 트리 구조를 무시하고 인덱스 세그먼트 전체를 멀티블록 리드 방식으로 스캔

물리적으로 디스크에 저장된 순서대로 인덱스 블록을 읽어 들임

인덱스가 파티션 되어 있지 않더라도 병렬 쿼리 가능

단점

-       인덱스 리프 노드가 갖는 연결 리스트 구조를 이용하지 않기 때문에 얻어진 결과 집합이 인덱스 키 순서대로 정렬되지 않음

-       쿼리에 사용되는 모든 컬림이 인덱스 컬럼에 포함되어 있을 때만 사용 가능

 

Index Range Scan Descending

Index Range Scan 과 동일한 스캔 방식이나 내림차순으로 정렬된 결과집합을 얻는다는 점이 다름

 

 

http://www.dbguide.net/db.db?cmd=view&boardUid=148220&boardConfigUid=9&categoryUid=216&boardIdx=140&boardStep=1

 

반응형

'데이타베이스' 카테고리의 다른 글

[MySQL] 시작시간과 종료시간의 차이 비교 함수, TIMEDIFF  (0) 2015.08.05
[ORACLE] 파티션(Partiton)  (0) 2015.08.04
[ORACLE] 인덱스  (0) 2015.08.04
[SQL] 조인  (0) 2015.08.03
DBMS의 공집합과 집합함수  (0) 2015.07.27