오라클에서 사용하는 인덱스 중 가장 기본적인 인덱스인 B-Tree Index에 대해 알아보자.
B-Tree Index : Balanced Tree Index
B - tree 인덱스는 계층구조를 가지고 있으며 Leaf, Internal(Branch) , Root 노드로 나뉜다.
리프 노도들은 소팅된 가운데 자기들끼리 연결되어 있다.
브랜치 노드는 리프 노드들에 인덱스 값을 전달하기 위해 분류와 분기를 위한 기준값만 저장한다.
비트리 인덱스는 널값을 제외하고 모든 인덱스 컬럼의 데이터 + 로우아이디를 리프노드에 정렬해서 저장한다(디폴트는 오름차순).
이때 로우아이디에는 Objext, File, Block, Row에 대한 정보를 가지고 있기 때문에, 블락을 찾아갈 수 있게 되는 것이다.
-> Single Block Reads
그렇다면 모든 쿼리는 인덱스를 사용해야되는가?
그렇지 않다. 인덱스는 테이브르이 전체 데이터 중 10~15%만을 처리할 때 효율적이다. 아까 비트리 인덱스는 ROWID 내의 블락에 대한 정보를 가지고 한번에 하나의 블록에 접근하는 Single Block Reads 전략을 가진다고 했다. 그렇기 때문에 너무 많은 데이터에 인덱스를 가지고 접근할 경우 오히려 처리 속도가 느려질 수 있다.
인덱스 스캔의 종류
인덱스 스캔의 종류는 다음과 같다.
- Unique Scan
- Range Scan
- Range Scan Descending
- Full Scan
- Fast Full Scan
Fast Full Scan 을 제외하고 다른 스캔들은 모두 Single Block Reads 전략을 가지고 Table Access를 한다.
Fast Full Scan은 쿼리가 사용하는 전체 컬럼들이 인덱스가 갖는 칼럼이 될 때만 사용되는 전략으로, Table Access가 불가능하고
Multi block reads가 적용된다. 한번에 몇개의 블락에 접근하는지는 DB 설정에 따라 다르다.
https://myjamong.tistory.com/237
'Study > Oracle' 카테고리의 다른 글
쿼리 성능 측정시 체크 리스트 정리 (0) | 2022.03.19 |
---|---|
조인의 개념과 실행 절차 (0) | 2022.03.19 |
조인 기법과 조인 수행 원리 (0) | 2022.03.18 |