Home Database Index란? (hash index, B-Tree, B+Tree)
Post
Cancel

Database Index란? (hash index, B-Tree, B+Tree)

Index란 말그대로 색인이라는 의미를 갖습니다.

색인은 데이터를 빠르게 조회할 수 있도록 도와주는 기능이라고 할 수 있습니다. 대표적으로 해쉬 인덱스와 B-Tree 인덱스가 있습니다.

해시 인덱스

Key Value로 데이터를 저장하는 자료구조 중 하나로, 하나의 데이터 검색할 때 유용합니다. 그러나 부등호 연산이 자주 사용되는 검색에서는 해시 인덱스는 적합히지 않습니다.

B-Tree

대부분의 데이터베이스에서 사용되는 B-Tree 자료구조는 이진 트리에서 파생된 구조이고 가장 상단의 노드를 루트 노드, 중간을 브랜치 노드, 가장 아래의 리프노드로 구성이 되어있습니다. 하나의 노드는 2개 이상의 키와 데이터를 가질 수 있는 점과 자식 노드 또한 여러 개의 키와 데이터를 가질 수 있다는 특징과 자동으로 구조를 조정하는 셀프 밸런싱 특징이 있어 트리의 높이를 낮출 수 있게 되어 보다 빠르게 조회가 가능합니다.

B+Tree

B-Tree의 확장된 개념으로 각 노드에 key와 data를 담는 B-Tree구조와는 다르게 브랜치 노드에 Key만 담아두고, 오직 리프 노드에만 key와 data를 저장하고 리프 노드끼리 Linked List로 연결되어 있습니다. 이로 인해 메모리를 확보하고 노드에 더 많은 key를 수용할 수 있게되어 트리의 높이는 더 낮아지는 효과를 볼 수 있습니다. 또한 풀 스캔시에도 리프노드에 데이터가 모두 있어 한 번의 선형 탐색만 하면 되기 때문에 모든 노드를 확인해야하는 B-tree에 비해 빠릅니다.

인덱스를 적절히 지정하는 순서는

인덱스를 지정하는 것은 추가 적인 공간과 시간이 필요하기에 많은 필드에 인덱스를 걸게되면 오히려 성능에 악영향을 미칠 수 있습니다.

  1. 같음을 비교하는 등치 조건으로 사용되는 컬럼을 우선으로하고
  2. 정렬에 쓰는 필드를 다음으로 지정합니다.
  3. 다중 값을 출력해야 하는 필드, 쿼리 자체가 부등호거나 많은 값을 출력해야하는 쿼리에 쓰는필드는 나중에 인덱스를 설정합니다.
This post is licensed under CC BY 4.0 by the author.

블로그 방황과 정착

1월 회고와 앞으로의 계획