본문 바로가기

SQLP

인덱스종류 및 특징

1. Index Range Scan

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

인덱스를 구성하는 선두컬럼이 조건절에 사용되어야 한다

range scan을 거쳐 생성된 결과집합은 인덱스 컬럼 순으로 정렬된 상태가 되서 sort order by연산을 생략하거나 min,max 값을 빠르게 추출할 수 있다

2. Index Full Scan

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

인덱스 스캔 단계에서 대부분 레코드를 필터링하고 일부에 대해서만 테이블 액세스가 발생하면 전체적인 I/O 측면에서 이 방식이 유리하다

 

3. Index Uniaue Scan

unique 인덱스를 통해 =조건으로 탐색하는 경우. 수직적 탐색만으로 데이터를 찾는 스캔방식

인덱스 키 컬럼을 모두 = 조건으로 검색할때. 그러나 범위검색조건 (between, 부등호, like)으로 검색할때는 range scan으로 처리된다. 또한, unique 결합 인덱스에 대해 일부 컬럼만으로 검색할때도 range scan 발생

 

4. Index Skip Scan

인덱스 선두컬럼의 Distinct Value 개수가 적고 후행 컬럼의 Distinct Value갯수가 많을 때 유용

조건에 부합하는 레코드를 포함할 가능성이 있는 리프 블록만 골라서 액세스

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

리프블록에 있는 정보만으로 다음에 방문해야 할 블록을 찾는 방법이 없어서 위에 있는 브랜치블록을 재방문한 뒤 방문할 리프블록에 대한 정소를 얻어야한다.

그러나 리프 블록에는 자신의 상위 블록을 가리키는 주소 정보가 없는데 어떻게 방문할까?

버퍼 피닝 기법이 활용된다. 브랜치 블록 버퍼를 피닝한채로 리프블록을 방문했다가 다시 브랜치 블록으로 되돌아와 다음 방문할 리프 블록을 찾는 과정을 반복하는 것. 그래서 추가적인 블록 I/O는 발생하지 않는다.

- 최선두컬럼은 조건절에 있고 중간 컬럼은 조건절에 누락된 경우 사용될 수 있음

- Distinct Value가 적은 두개의 선두컬럼이 모두 누락된 경우에도 사용될 수 있음

- 선두컬럼이 부등호, between, like 같은 범위검색 조건일때도 사용될 수 있음

 

5. Index Fast Full Scan

인덱스 트리구조를 무시하고 인덱스 세그먼트 전체를 Multiblock Read 방식으로 스캔

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

 

출처 : 오라클성능고도화2