View Source

- 컴퓨터에서 사용하는 최소 단위인 비트(0100,0010..)를 이용하여 컬럼값을 지정하고 이를 이용하여 ROWID를 자동생성 하는 인덱스.

h2. 2.2.1 비트맵 인덱스의 탄생 배경
h3. B-Tree 인덱스의 문제점
- 실제 컬럼 값과rowid를 보관하고 있다.
- 컬럼값을 인덱스에도 보관하고 있으므로 테이블과 데이터와 중복된다.
- 속도를위해 결합인덱스를 많이 생성하게 되는데 중복된것들이 많아 대용량에는 부담을 줄수가 있다.
- 컬럼값의 분포도가 좁은 컬럼을 선정해야한다.
- 결합인덱스 사용시 조건을 사용하지 안거나 '='조건을 사용해야한다.
- 그렇지 안을경우에는 액세스 효율이 저하될수있다.
- 인덱스는 NULL, NOT를 사용한 부정형 조건, 복잡한 OR을 포함하고 있는경우 인덱스 사용하기 어렵다.

h2. 2.2.2 비트맵 인덱스의 구조와 특성
h3. 구조
- 선분형태(START ROWID ~ END ROWID) 로 저장하므로 일종의 압축 개념이 되며, 키 압축이 적용되어 저장공간이 매우절약.
- 컬럼값을 직접저장안하고 해당 로우가 유효값을가질때 '1'이라는 비트가 저장된다.
h3. 저장방법
- 해당 비트를 액세스하여 ROWID로 전환할 수 있다.
- 카디널리트(엔티티관계 1:N)가 높지않고 동일 값의 반복정도가 많다면 천만건인 테이블의 비트맵이 10M넘지 안기때문에 크게 절약된다.
h3. 특징
- NULL, NOT 조건 사용가능.
- LIKE, BETWEEN, >,<,>=,<= 을 사용하면선분 형태이기때문에 인덱스가 크게 증가해서 많은 부하가 유발될수있으니 사용자제하는게 좋다.
- 통계, 집계업무 처리시 COS를기준으로 CBO모드에서만 처리하는게 효율적이다.
- 파티션 테이블에서는 LOCAL인덱스만 적용해서 사용할수 있다.

h2. 2.2.3 비트맵 인덱스의 액세스
- 먼저 관련 비트맵을 액세스 하여 AND연산을 하고 그 조건에 맞는 것들만 색출.(010 010 로 먼저 AND연산을 한후 해당되는 ROWID를 찾아가 색출한다.)(P.78참조)
{code:sql}
Execution Plan
------------------------------------------------------------------------------
0 SELECT STATEMENT
1 0 SORT (AGGREGATE)
2 1 TABLE ACCESS (BY INDEX ROWID) OF 'PARTS'
3 2 BITMAP CONVERSTION (TO ROWIDS)
4 3 BITMAP AND
5 4 BITMAP INDEX (SINGLE VALUE) OF 'COLOR_BIX'
6 5 BITMAP INDEX (SINGLE VALUE) OF 'SIZE_BIX'

{code}