Msg 성장일기

인덱스 확장기능 사용법 본문

study_SQL/친절한 SQL 튜닝

인덱스 확장기능 사용법

공부하는 어른이 2023. 6. 14. 11:16

1. Index Range Scan

└ BTree의 가장 일반적이고 정상적인 형태의 액세스 방식, 인덱스 루프에서 리프블록까지 수직적으로 탐색한 후에 '필요한 범위(Range)만' 스캔한다. 실행계획은 아래와 같다.

 

2. Index Full Scan

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

위 사진에서 인덱스 선두 컬럼인 ENAME이 조건절에 없으므로 Index Range Scan은 불가능하다. 뒤쪽에 SAL 컬럼이 인덱스에 있으므로 Index full scan을 통해 where절 성립한다.

 Index full scan은 대개 데이터 검색을 위한 최적의 인덱스가 없을 때 차선으로 선택된다.

 

3. Index Skip Scan

└ 오라클에서 인덱스 선두 컬럼이 조건절에 없어도 인덱스를 활용하는 새로운 스캔방식
└ 인덱스 선두 컬럼의 Distinct Value 개수가 적고 후행 컬럼의 Distinct value개수가 많을 때 유용하다.

 

index skip scan 예시
index skip scan 작동원리

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

 

4. Index Fast Full Scan

Index full Scan보다 빠르다. 논리적인 인덱스 트리 구조를 무시하고 인덱스 세그먼트 전체를 Multiblock I/O방식으로 스캔하기 때문이다.
속도는 빠르지만, 인덱스 리프 노드가 갖는 연결 리스트 구조를 무시한 채 데이터를 읽기 때문에 결과집합이 인덱스 키 순서대로 정렬되지 않는다.

 

Index Full Scan
Index Fast Full Scan
1. 인덱스 구조를 따라 스캔
2. 결과집합 순서 보장
3. Single Block I/O
4. (파티션 돼 있지 않다면) 병렬스캔 불가
5. 인덱스에 포함되지 않은 컬럼 조회 시에도 사용 가능
1. 세그먼트 전체를 스캔
2. 결과집합 순서 보장 안 됨
3. Multiblock I/O
4. 병렬스캔 가능
5. 인덱스에 포함된 컬럼으로만 조회할 때 사용 가능

 

5. Index Range Scan Descending

Index Range Scan과 기본적으로 동일한 스캔 방식이다. 인덱스를 뒤에서부터 앞쪽으로 스캔하기 때문에 내림차순으로 정렬된 결과집합을 얻는다는 점만 다르다.

EMP 테이블을 EMPNO 기준으로 내림차순 정렬하고자 할 때 EMPNO 컬럼에 인덱스가 있으면 옵티마이저가 알아서 인덱스를 거꾸로 읽는 실행계획을 수립한다.

 

 

 

 

출처: 개발자를 위한 SQL 튜닝 입문서 친절한 SQL 튜닝

 

'study_SQL > 친절한 SQL 튜닝' 카테고리의 다른 글

인덱스 스캔 효율화  (0) 2023.06.14
부분범위 처리 활용  (0) 2023.06.14
테이블 액세스 최소화  (0) 2023.06.14
인덱스 기본  (0) 2023.06.13
SQL 처리과정과 I/O  (0) 2023.06.13