[데이터베이스] 인덱스(Index)
데이터베이스 인덱스(Database Index)
- 지정한 column을 기준으로 메모리 영역에 일종의 색인을 생성하는 것.
- 데이터베이스의 레코드가 늘어날수록 table full scan의 속도는 느려진다. 인덱스를 사용하면 빠른 탐색이 가능하다.
- 하지만 인덱스는 키 값을 기준으로 정렬된 상태를 유지하기 때문에 검색속도는 빨라질 수 있지만, 삽입, 삭제, 갱신을 느려진다.
1) 인덱스 구조
(1) B-Tree 인덱스
- B-Tree 인덱스는 역트리 형태의 자료구조
- Root와 Branch 노드에는 키 값으로 하위노드들의 데이터 값 범위가 저장되며, value에는 하위노드를 찾는데 필요한 주소 정보가 저장된다.
- Leaf노드의 key 값으로는 해당 데이터의 인덱스 키 값이 저장되며, value에는 key 값에 해당하는 테이블 레코드 주소 (ROWID)가 저장된다.
- Leaf노드는 양방향으로 연결되어있기 때문에 수평 스캔 또는 범위 스캔이 가능하다.
(2) 탐색
수직 탐색 - 해당하는 키값을 찾기 위해 Leaf 노드까지 찾아가는 과정이다 (Root -> branch -> leaf)
수평 탐색 - leaf 노드는 양방향으로 연결되어 있기 때문에 일정 범위 또는 전 범위를 leaf 노드 간 이동하면서 탐색하는 과정이다
2) 인덱스 탐색 방식
(1) Index Range Scan
- Index Root 노드에서 Leaf 노드까지 수직 탐색 후, Leaf 노드를 필요한 범위만 스캔
(2) Index Full Scan
- 수직 탐색 없이 Leaf 노드를 처음부터 끝까지 수평탐색
- 첫 번째 Leaf 노드를 찾아가기 위한 수직 탐색 1회 발생
- 최적의 인덱스가 없을 때 차선으로 선택
(3) Index Unique Scan
- 수직 탐색만으로 데이터를 찾는 스캔 방식
- Unique Index를 '=' 조건으로 찾는 경우
(4) Index Skip Scan
- Root 노드 또는 Branch 노드에서 읽은 컬럼 값 정보를 이용해 조건에 부합하는 레코드를 포함할 '가능성 있는' 하위 노드만 골라서 탐색