비트맵인덱스는 컴퓨터에서 사용하는 최소단위인 비트를 이용하여 컬럼값을 저장하고, ROWID를 자동으로 생성하는 인덱스의 한 방법이다.
비트를 직접 관리하므로 저장공간이 크게 감소하고 비트연산을 수행할 수 있다는 이점이 있다.
Bitmap Index는 Index key value + Start Rowid + End Rowid + Bitmap 엔트리로 구성되어 있다.
Start Rowid 와 End Rowid 의 Range사이에 있는 모든 row수만큼 Bitmap이 표현되어야 하지만, 오라클에서는 내부적인 압축 알고리즘을 사용하여 Bitmap을 생성하기 때문에 모두 표현되지 않는 경우도 있다
비트맵도 B-트리처럼 조직되어 있지만, leaf 노드는 ROWID 값 들 대신 각 키 값에 대한 비트맵을 저장 한다.
- 테이블이 많은 행을 가지며 키 열은 적은 분포도를 가질 때, 즉 열이 갖는 서로 다른 값이 몇 개 안 될 때 유리하다.(성별이나 결혼여부 등..)
- 질의문이 OR 연산자를 포함하는 여러 개의 WHERE 조건을 자주 사용할 때 유리하다.
- INSERT, UPDATE, DELETE와 같은 Query에서는 무의미 하다.
- 분포도가 좋은(Unique성:값의종류가 많다) 값에 대해서는 일반적인 B-Tree인덱스가 유리하다. 즉, Bitmapped Index적용 Column의 후보는 대개 5가지 정도 이내의 값(cardinality)을 갖는다
B-tree 인덱스 | 비트맵 인덱스 |
---|---|
큰 분포도(Cardinality)를 갖는 테이블에 적합 | 적은 분포도를 갖는 테이블에 적합 |
비교적 키의 갱신 비용이 적음 | 갱신 비용이 매우 큼 |
OR사용 Query문에 비 효율적 | OR사용 Query문에 효율적 |
OLTP에 유용 | DSS에 유용 |
SQL> CREATE BITMAP INDEX user_gender_idx ON user TABLESPACE bitmap_idx;
- 강좌 URL : http://www.gurubee.net/lecture/1109
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.