본문 바로가기

Oracle DB

인덱스 구조 및 종류의 이해(1)

 

1. 인덱스의 구조

 

- 인덱스 탐색 순서

1) 수직적 탐색 : Root - Branch - Leaf. 읽고자 하는 시작점 검색. Random I/O

2) 수평적 탐색 : Leaf Block의 시작점부터 종료점 까지. Sequential I/O

3) 테이블 Random Access : Data 블록을 읽는 경우

* 비용 : 테이블 Radom Access >수직적 탐색 > 수평적 탐색

- 기본 구조 : Root Node, Branch Node, Leaf Node

- Root Node : 가장 상위노드로 하위 Branch Node 수만큼의 Row

- Branch Node : Root와 Leaf의 연결고리로 자기 하위 Leaf Node 수만큼의 Row

- Leaf Node : Key + Row ID로 구성.

 

 

2. 인덱스의 기본 원리

- 인덱스의 사용이 불가능 하거나 범위스캔이 불가능한 경우

1) 인덱스 컬럼의 좌변가공 -> Where절의 좌변을 임의로 변경한 경우 -> Index Full Scan

2) Null 값의 검색 -> Index Full Scan

3) 묵시적 형 변환 : 컬럼과 상수의 Data Type이 상이할 경우

- 문자를 숫자로 변환 후 비교. 변환이 불가능 할 경우 에러 발생

* Like 연산자일 경우 반대로 숫자를 문자로 변경.

 

 

 

 

3. 다양한 인덱스 스캔 방식

- Index Range Scan : SQL 튜닝의 핵심 원리로서 항상 빠른 속도를 보장하지는 않으며 테이블로 액세스 하는 횟수를 얼마만큼 줄이고 스캔하는 범위를 줄일수록 좋다.

* 이 경우 인덱스를 구성하는 선두 컬럼을 조건절에 사용한다. -> 정렬 원칙!

ex) Select * From 사원 Where 이름 = ‘홍길동’ 인 경우 인덱스에 이름이 선두에 온다.

 

- Index Full Scan : 적당한 인덱스가 없을 경우 Table Full Scan을 수행하지만 조회 조건의 인덱스가 있고 선두 컬럼이 아니지만 옵티마지어가 인덱스 활용 시 이익이 판단할 경우 실행. * 최종 결과 값이 적을 때 Full Table Scan보다 효율적이지만 많을 경우 Full Table Scan이 더 효율적.

 

 

- Index Unique Scan : 수직적 스캔만 발생하며 Unique 인덱스 일 경우 사용. ‘= 조건’ 일 경우만 사용한다.

 

- Index Skip Scan : 조회 조건이 인덱스 선두 칼럼이 아니고 선두 칼럼의 Distinct가 매우 낮을 때 사용. Between, Like, 부등호 일 때도 사용 가능.

*Distinct란 Data 종류의 개수를 의미.

 

 

 

 

- Index Fast Full Scan : 전체 인덱스를 Full Scan하며 Multi-Block I/O (여러개를 한꺼번에)며 속도가 빠르고 Index의 논리적 순서와 무관하게 물리적으로 읽으며 키 컬럼 순서와 무관하게 결과가 출력.

Index Full Scan

Index Fast Full Scan

1. 인덱스 구조를 따라 스캔

2. 결과집합 순서 보장

3. Single Block i/O

4. 병렬스캔 불가 (파티션시 가능)

5. 인덱스에 포함되지 않은 컬럼 조회시에도 사용 가능

1. 세그먼트 전체를 스캔

2. 결과집합 순서 보장 안됨

3. Multi Block I/O

4. 병렬스캔 가능

5. 인덱스에 포함된 컬럼만으로만 조회할 때 가능 -> Select 절에 인덱스에 있는 것만!

  •  

- In-List Iterator : In의 데이터 개수만큼 진행을 하는 것

 

 

- Index Range Scan Descending : Index Range Scan을 반대방향부터 진행하는 것

- 그 외 Index Combine의 방식이 있다.

 

 

 

'Oracle DB' 카테고리의 다른 글

조인의 원리 및 활용  (0) 2021.04.03
인덱스 구조 및 이해(2)  (0) 2021.04.03
SQL 파싱 부하  (0) 2021.04.03
옵티마이저 원리  (0) 2021.04.03
튜닝 기본 원칙  (0) 2021.04.03