인덱스(Index)
- 인덱스는 원하는 데이터를 쉽게 찾을 수 있도록 돕는 책의 찾아보기와 유사한 개념으로, 인덱스의 목적은 검색 성능의 최적화이다.
- But, 인덱스를 생성하면 DML(insert, update, delete 등)은 느려진다.
B-트리 인덱스
- 트리 기반 인덱스이다.
- DBMS 에서 가장 일반적인 인덱스이다.
- Branch Block과 Leaf Block으로 구성된다.
- Branch Block 중 가장 상위에 있는 블록을 Root Block이라고 한다.
- Branch Block은 분기를 목적으로 하는 블록이다.
- Leaf Block은 가장 아래 단계에 존재한다.

- Leaf Block은 인덱스를 구성하는 컬럼의 데이터와 해당 데이터를 가지고 있는 행의 위치를 가리키는 레코드 식별자(RID, Record Identifier/ Rowid) 로 구성되어 있다.
- 만약 인덱스 데이터의 값이 동일하면 레코드 식별자의 순서로 저장된다.
- Leaf Block은 양방향 링크를 가지고 있다.( 오름차순과 내림차순 검색 쉽게 가능)
- = 로 검색하는 일치 검색과 between, > 등과 같은 연산자로 검색하는 범위 검색 모두에 적합한 구조이다.
- 인덱스를 생성할 때 동일 컬럼으로 구성된 인덱스를 중복해서 생성은 불가능하지만, 인덱스 구성 컬럼은 동일하고 컬럼 순서가 다르면 서로 다른 인덱스로 생성할 수 있다.
원하는 값을 찾는 과정
- Branch Block의 가장 왼쪽 값이 찾고자 하는 값보다 작거나 같으면 왼쪽 포인터로 이동
- Branch Block의 값 사이에 존재하면 가운데 포인터로 이동
- Branch Block의 찾고자 하는 값이 가장 오른쪽에 있는 값보다 크면 오른쪽 포인터로 이동