본문 바로가기
Dev/database

Database Index 종류

by Luigi.yoon 2023. 8. 9.



 

 

B-tree index

  • B-tree : 이진 트리를 확장해 하나의 노드가 가질 수 있는 자식 노드의 최대 숫자가 2보다 큰 트리 구조이다.
  • B+ tree : B트리와 대조적으로 B+트리는, 모든 레코드들이 트리의 가장 하위 레벨에 정렬되어있다. 오직 키들만이 내부 블록에 저장된다.
  • B* tree : 노드의 2/3 이상이 채워지는 B-tree (B-tree 삽입/삭제 시 노드분리를 줄이려고 고안됨)

B-Tree인덱스의 문제점

  • B-TREE인덱스에서는 실제 컬럼 값을 인덱스에도 보관하고 있어야 한다는 점이 대용량 데이터를 관리할 때 부담
  • B-TREE인덱스 컬럼값의 분포도가 좋아야 한다는 점
  • 결합인덱스에서 조건을 사용하지 않는 컬럼이나 =조건이 아닌 컬럼이 결합인덱스 중간에 있으면 액세스효율성이 떨어진다는 점
  • 다양한 액세스패턴을 수용하기 위해 많은 인덱스가 필요할 수 있다는 점
  • NOT이나 NULL을 사용하거나 복잡한 OR조건에서는 인덱스의 성능을 보장받지 못한다는 점

Hash index

  • hash index란 데이터의 위치를 hashing을 통해 index를 저장하는 방식이다.
  • 범용적인 index 는 아니고 고유의 특성과 용도에 따라 필요한 경우에만 사용한다.
    • 동등 비교 검색에는 최적화돼 있지만 범위를 검색한다거나 정렬이 불가하다.
    • 동등 비교 검색 시 B-tree index 보다 빠르다.
  • hash function에 key 값을 통과시키면 바로 index의 위치를 얻을 수 있기 때문에 별도의 공간이 필요하지 않다

 

 

Bitmap index

  • B* Tree 인덱스가 NULL값을 보관하지 않는 것과는 달리 Bitmap 인덱스는 NULL값에 대한 BIT값을 저장하여 비트리 인덱스의 NULL문제를 해결했으며 AND, OR 연산시 비트연산을 빠르게 수행하여 탁월한 성능을 보인다.
  • 작은 크기에 더 많은 비트맵을 저장할 수 있는 이점이 있다.
  • B* Tree 인덱스는 변경되는 인덱스 엔트리에만 영향을 주는 반면, 비트맵 인덱스는 모든 비트맵에 영향을 끼친다.
    • 이때 리프 블록 레벨의 락(Lock)이 발생된다. 
    • 해당 테이블에 변경이 발생하는 경우 많은 부하가 뒤따르는 구조

Bitmap index의 장점

  • 비트맵 인덱스는 인덱스 크기가 작다는 점, 그리고 분포도가 낮은 컬럼에 유리한 강점을 가지고 있다.

Bitmap index의 단점

  • 비트맵 인덱스는 DML이 많은 테이블에서 블록 레벨 락에 의한 DML 속도 저하가 발생할 수 있다.
  • 분포도가 낮은 컬럼에 적용해도 비트맵이 많으면 성능 저하가 발생한다.

'Dev > database' 카테고리의 다른 글

PACELC Theorem(패슬씨 정리)  (2) 2025.06.12
CAP Theorem(CAP 정리)  (1) 2025.06.12
콘솔 mysql 접속 방법  (0) 2023.11.02
웹 앱 API 개발을 위한 GraphQL (study)  (0) 2023.04.25
Redis Hash 에서 key pattern 을 이용한 삭제  (0) 2019.04.05