공유 전제 값마다 비트맵을 들고 있으므로, 같은 구조가 읽기와 쓰기에서 전혀 다르게 작동합니다.

값 종류가 적고 자주 바뀌지 않으면 비트 연산으로 빠르게 필터링할 수 있지만, 행이 바뀌면 비트맵 세그먼트 전체를 함께 다뤄야 해서 운영 특성이 급격히 나빠집니다.

판단 축
읽기 중심 분석
쓰기 중심 운영
시작 조건
낮은 카디널리티 컬럼

성별, 상태값, 부서처럼 값 종류가 적을수록 한 값에 대응하는 비트맵이 작고 단순합니다.

INSERT / UPDATE / DELETE 빈번

행 하나가 바뀌어도 관련 비트맵의 여러 비트를 다시 맞춰야 합니다.

인덱스 내부
조건 결합을 비트 연산으로 처리

여러 조건을 읽어도 AND / OR / NOT 만으로 결과 집합을 빠르게 좁힙니다.

복합 조건에 강함 인덱스 크기 작음
비트맵 세그먼트를 함께 갱신

행 잠금이 아니라 세그먼트 단위 영향이 커져서 동시 작업이 쉽게 막힙니다.

갱신 비용 큼 잠금 범위 넓음
실제 결과
B+Tree보다 유리한 경우가 많음

대량 필터링과 집계가 많은 DW / OLAP 쿼리에서 특히 효율이 좋습니다.

성능과 동시성이 함께 저하

짧은 트랜잭션이 몰리는 OLTP 환경에서는 사실상 금지에 가깝습니다.

Oracle 전용 구문
CREATE BITMAP INDEX idx_dept
ON employees(department);