비트맵 인덱스란, 인덱스 컬럼의 데이터를 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인 칼럼의 값을 반환하면 빠르게 필터링을 수행할 수 있습니다.
위의 내용을 살펴보았을 때, bitmap index의 특징은 다음과 같습니다.
B-Tree와 다르게, 중복도가 높은 데이터에 대한 읽기 연산을 할 경우 유용하게 사용되는 인덱스입니다. Oracle 등 bitmap index가 지원되는 DB를 사용할 경우, 알아두면 유용할 것 같습니다. 참고로 MySQL은 bitmap index를 지원하지 않습니다.