CS/Database

[데이터베이스] 인덱스(Index)

테리는당근을좋아해 2020. 6. 24. 14:59

데이터베이스 인덱스(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 노드에서 읽은 컬럼 값 정보를 이용해 조건에 부합하는 레코드를 포함할 '가능성 있는' 하위 노드만 골라서 탐색