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

2.2.1 비트맵 인덱스의 탄생 배경

B-Tree 인덱스의 문제점

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

2.2.2 비트맵 인덱스의 구조와 특성

구조

  • 선분형태(START ROWID ~ END ROWID) 로 저장하므로 일종의 압축 개념이 되며, 키 압축이 적용되어 저장공간이 매우절약.
  • 컬럼값을 직접저장안하고 해당 로우가 유효값을가질때 '1'이라는 비트가 저장된다.

저장방법

  • 해당 비트를 액세스하여 ROWID로 전환할 수 있다.
  • 카디널리트(엔티티관계 1:N)가 높지않고 동일 값의 반복정도가 많다면 천만건인 테이블의 비트맵이 10M넘지 안기때문에 크게 절약된다.

특징

  • NULL, NOT 조건 사용가능.
  • LIKE, BETWEEN, >,<,>=,<= 을 사용하면선분 형태이기때문에 인덱스가 크게 증가해서 많은 부하가 유발될수있으니 사용자제하는게 좋다.
  • 통계, 집계업무 처리시 COS를기준으로 CBO모드에서만 처리하는게 효율적이다.
  • 파티션 테이블에서는 LOCAL인덱스만 적용해서 사용할수 있다.

2.2.3 비트맵 인덱스의 액세스

  • 먼저 관련 비트맵을 액세스 하여 AND연산을 하고 그 조건에 맞는 것들만 색출.(010 010 로 먼저 AND연산을 한후 해당되는 ROWID를 찾아가 색출한다.)(P.78참조)

   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'