Steady Mind For My Life

https://github.com/jongseok3910/Spring-Study

Oracle

인덱스

함탕 2023. 7. 31. 18:54
728x90
728x90

데이터베이스 테이블에서 데이터를 찾는 방법은 두가지다

1. 테이블 전체 스캔한다.

2. 인덱스를 이용한다.

 

인덱스(책 뒤쪽에 있는 색인과 같은 느낌)

인덱스는 대용량 테이블에서 필요한데이터만

빠르게 효율적으로 액세스 하기 위해 사용하는 오브젝트이다.

DBMS는 일반적으로 B*Tree 인덱스를 사용한다.

 

B*Tree 인덱스(Balanced Tree)

인덱스 칼럼 값을 미리 정렬해 두고 정렬된 데이터 값을 

비교해 매우 효율적으로 로우를 검색하는 인덱스다.

 

나무를 거꾸로 뒤집은 모양이어서 

뿌리(Root), 가지(Branch). 잎사귀(Leaf) 순으로 구성되어있다.

 

리프블록에는인덱스 칼럼의 칼럼값이 ROWID와 함께

칼럼값으로 정렬된 상태로 저장된다.

인접한 리프블록은 서로 링크 돼 있다.

 

브랜치블록에는 자신에게 속해 있는 리프블록의 위치를

나타내는 DBA(data block address)와 리프블록에

포함된 칼럼 값의 범위가 포함 되어있다.

 

루트블록에는 자신에게 속한 블록의 DBA(data block address)

와 리프블록에 포함된 칼럼 값의 범위가 포함 되어있다.

 

인덱스 탐색 방법

1. 수직적 탐색(인덱스 스캔 시작지점을 찾는 과정)

인덱스 수직적 탐색은 루트블록에서부터 시작한다.

'조건을 만족하는 첫 번째 레코드'를 찾는 과정이다.

(ex: 루트블록부터 리프블록까지의 탐색과정)

 

2. 수평적 탐색(데이터를 찾는 과정)

수직적 탐색을 통해 스캔 시작점을 찾은 후

찾고자 하는 데이터가 더 안 나타날 때까지

인덱스 리프 블록을 수평적으로 스캔한다.

 

인덱스 리프 블록끼리는 서로 앞뒤 블록에 대한

주소값을 가지고 있어 수평적탐색이 가능하다

(양방향 연결 리스트 구조다)

 

*인덱스를 수평적으로 탐색하는이유

1. 조건절에 만족하는 데이터를 모두 찾기 위함

2. ROWID를 얻기 위함(테이블도 액세스 하려면 필요하다)

 

728x90
300x250

'Oracle' 카테고리의 다른 글

REDO 로그 파일 & REDO 데이터(1)  (0) 2023.10.15
오라클의 메모리 관리(PGA & SGA)  (0) 2023.10.03
데이터베이스와 인스턴스(2)  (2) 2023.08.27
데이터베이스와 인스턴스(1)  (0) 2023.08.17
쿼리 처리 원리  (0) 2023.07.18