저장 구조

값마다 하나의 비트맵을 공유한다

같은 행 번호를 기준으로 각 값이 1 또는 0만 기록합니다. low-cardinality 컬럼일수록 이런 표현이 특히 잘 맞습니다.

행 번호
1
2
3
4
5
6
7
8
9
10
M
1
0
1
1
0
1
0
0
1
1
F
0
1
0
0
1
0
1
1
0
0

행 위치가 공통 기준이라서, 다른 조건의 비트맵도 같은 자리끼리 바로 결합할 수 있습니다.

조건 결합

gender = 'M' AND dept = 'IT'

조건마다 준비된 비트맵을 꺼내고, 비트 AND를 수행하면 둘 다 만족하는 행만 1로 남습니다.

gender_M
1
0
1
1
0
1
0
0
1
1
dept_IT
1
1
0
0
1
0
0
1
0
0
비트 AND → 공통으로 1인 위치만 남김
결과
1
0
0
0
0
0
0
0
0
0

최종적으로 1번 행만 남습니다. OR 조건도 같은 방식으로 비트 OR로 빠르게 결합할 수 있습니다.

읽기에서 강한 이유

여러 조건을 비트 연산으로 합치므로 대량 조회나 분석 쿼리에서 AND/OR 평가가 매우 빠릅니다.

쓰기에서 약한 이유

행이 자주 추가·수정되면 관련 비트맵을 계속 갱신해야 해서 DML 중심 OLTP에는 부담이 큽니다.