[DB] Bitmap Index란?

다은·2025년 7월 29일
1

DB

목록 보기
3/3

1. Bitmap Index

비트맵 인덱스란, 인덱스 컬럼의 데이터를 0과 1, 즉 비트로 변환해 인덱스의 키로 사용하는 방법입니다. 이는 인덱스 키 value, 즉 컬럼의 데이터를 포함하는 행의 주소를 제공합니다.


bitmap index에 대해 그림으로 먼저 살펴봅시다.
Student table의 major, grade 컬럼에 대해 bitmap index를 생성하면 아래와 같습니다.

major 컬럼에 대한 인덱스는 비트를 값으로 가지는 맵 형태로 표현할 수 있습니다.
인덱스의 행은 컬럼의 도메인 값(Computer, Software, Law), 컬럼은 Student table의 PK(1, 2, 3, 4, 5, 6)가 됩니다.

SELECT *
FROM Student
WHERE major = Software
AND grade = 2

이라는 SQL문 수행을 위해서는 WHERE절의 두 번의 조건을 위한 필터링을 거쳐야 합니다.

먼저, major = Software 조건을 위해 major 인덱스에서 Software행을 찾습니다. 마찬가지로, grade = 2 조건을 위해 grade 인덱스에서 2행을 찾아 AND 연산을 수행합니다. 결과가 1인 칼럼의 값을 반환하면 빠르게 필터링을 수행할 수 있습니다.


2. Bitmap Index의 특징

위의 내용을 살펴보았을 때, bitmap index의 특징은 다음과 같습니다.

  • 비트맵 인덱스의 길이는 레코드의 수와 동일합니다.
    • 그러나 테이블의 레코드 수만큼 인덱스를 생성하면 크기가 매우 커져 오히려 성능이 저하될 수 있습니다.
    • 따라서, 인덱스 엔트리에 Range를 이용해 시작 레코드 id, 끝 레코드 id를 저장해 관리합니다.
  • B-Tree에 비해 다양한 연산을 수행할 수 있습니다.
  • 데이터가 비트로 표현되기 때문에 저장 공간에 대한 효율성이 좋습니다.
  • 다중 조건을 만족하는 튜플 계산에 유용합니다.
  • 칼럼의 중복도, 즉 분포도가 높을 때 사용하기 좋습니다.
    • 분포도가 낮을 경우, 유니크한 값마다 인덱스를 생성해야 하기 때문에 오히려 성능이 저하됩니다.
  • 읽기 연산이 많이 일어나는 경우에 사용하기 좋습니다.
    • 삭제, 수정 연산이 많이 일어나는 경우, 1값을 0으로 바꾸는 등의 연산이 필요합니다.



B-Tree와 다르게, 중복도가 높은 데이터에 대한 읽기 연산을 할 경우 유용하게 사용되는 인덱스입니다. Oracle 등 bitmap index가 지원되는 DB를 사용할 경우, 알아두면 유용할 것 같습니다. 참고로 MySQL은 bitmap index를 지원하지 않습니다.

profile
CS 마스터를 향해 ..

0개의 댓글