새로쓴 대용량 데이터베이스솔루션 1 (2011년)
비트맵(Bitmap) 인덱스 0 0 67,260

by 구루비스터디 Bitmap 인덱스 비트맵 인덱스 [2013.09.11]


  1. 2.2.1 비트맵 인덱스의 탄생 배경
  2. 2.2.2 비트맵 인덱스의 구조와 특성
  3. 2.2.3 비트맵 인덱스의 액세스


  • 컴퓨터에서 사용하는 최소 단위인 비트(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'


"구루비 데이터베이스 스터디모임" 에서 2011년에 "새로쓴 대용량 데이터베이스 솔루션1" 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/2605

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입