by-nc-sa     개발자, DBA가 함께 만들어가는 구루비 지식창고!

2.2. 비트맵(Bitmap) 인덱스

Version 7 by 김도희
on 8월 03, 2011 02:38.


compared with
Current by 김도희
on 8월 03, 2011 02:40.


 
Key
These lines were removed. This word was removed.
These lines were added. This word was added.

View page history


There are 1 changes. View first change.

 - 컴퓨터에서 사용하는 최소 단위인 비트(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를 찾아가 색출한다.)
  - 먼저 관련 비트맵을 액세스 하여 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}