비트맵(Bitmap)인덱스
    비트를 이용하여 컬럼값을 저장하고 이를 이용하여 rowid를 자동으로 생성하는 인덱스

비트맵 인덱스의 탄생 배경

기 존 인덱스들의 문제점에 대한 대안
  • B-tree 인덱스는 실제 컬럼 값을 인덱스에도 보관함으로써 중복이 생김
  • B-tree 인덱스는 컬럼의 분포도가 좁아야 최적의 성능을 발휘 하므로 분포도가 넓을 경우 불리
  • 결 합인덱스는 그 조건에 맞지 않는 컬럼이나 '='조건이 아닌경우가 있으면 성능의 저하가 있음
  • b-tree 인덱스는 DW 하우스 처럼 카디널러티가 낮은 다수의 디맨전들이 다양한 요구를 할경우 엄청난 개수의 인덱스를 동원해야함
  • b-tree 인덱스는 'null','not'을 사용한 부정형 조건 복잡한 'or'등에서 제 성능을 발휘하지 못함
  • 일부의 컬럼으로 인덱스를 구성하여 'driving(처리조건 주관)'하고 나머지는 체크역할로 사용
      (적은량의 결과에 내부적으로 많은 범위를 액세스한후 조건에 맞는것을 버리는 형태로 동작할수도 있음)


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


BITMAP.png


인용:
color라는  컬럼에 'yellow,green,red,null'이 들어있는경우 비트 맵 인덱스를 생성
" create bitmap index prod_color_btidx on prod(color); "
하 면 b-tree와 같은구조로 tree를 구성하여 최종 리프 노드에 각 값들의 bit값으로 변환하여 저장


  • 비 트 저장시 rowid를 선분형태(start rowid ~ end rowid)로 저장하여 압축의 효과를 가질수 있으묘 키 압축이 적용되어 저장공간이 절약된다. 컬럼값의 저장역시 비트형태로 '1'이라는 비트가 저장되며 rowid로 전환할때에도 해당비트를 액세서 하여 역연산을 수행하면 되어 btree처럼 각 컬럼마다 rowid를 가지지 않아도 된다
  • 비트맵 인덱스는 'AND' 와 'OR' 검색 시에 비트 연산을 적용하면 원하는 결과로 나타남
    (비트연산: 0 AND 1 = 0, 0 OR 1 = 1)
  • null 값역시 bit값을 가지기 때문에 b-tree인덱스의 null의 문제해결

단점
  • '=' 이 아닌 LIKE,BETWEEN,>,<,>=,<= 등의 사용시 분리
  • 저장시 선분형태로 저장되기 때문에 빈번한 수정이 발생되는 컬럼에서는 블록레벨 잠금등으로 많은 부하가 유발될수 있음

비트연산의 실행계획
BITMAP CONVERSION
  • TO ROWIDS : 테이블 액세스를 위해 비트맵을 ROWID로 변환
  • FROM ROWIDS : ROWID를 비트맵으로 변환
  • COUNT : 실제값이 필요하지 않은 경우 해당 ROWID의 개수만 산출

BITMAP INDEX
  • SINGLE VALUE : 인덱스 블록 내에서 하나의 키 값에 해당하는 비트맵을 검색
  • RANGE SCAN : 하나의 키 값에 해당하는 여러 개의 비트맵을 검색
  • FULL SCAN : 시작/종료값이 제공되지 않은 경우 비트맵 전체를 스캔

BITMAP MERGE
  • 범 위 스캔으로 얻은 몇 개의 비트맵을 하나로 머지

BITMAP MINUS
  • 부 정형 연사이나 차집합을 구하는 작업

BITMAP OR
  • 두 개의 비트맵을 대상으로 비트 열에 대한 OR 연산을 수행

BITMAP AND
  • 두 개의 비트맵을 대상으로 비트 열에 대한 AND 연산을 수행

BITMAP KEY ITERATION
  • 한 테이블에서 얻은 각각의 로우들을 특정 비트맵 인덱스에 대해 연속해서 확인하여 비트맵을 찾는것
    뒤에 비트맵 머지가 수행되어 하나의 비트맵으로 합쳐지며 스타 변형 조인에서 나타남

인용:
비트맵 인덱스는 분포도가 좁은 컬럼에서 최적의 성능을 발휘하며 인덱스 생성시 ROWID값을
선 분형태( 시작 - 끝 ) 로 저장하고 각 컬럼의 값을 0,1의 비트 값으로 저장한다.
그에 따라 AND, OR 등의 복합 조건 검색시 '논리 연산' 의 결과가 찾고자 하는 자료의 결과를 의미하게
되어 효율 적인 활용이 가능하다.

그리 고 각 DBMS의 버젼에 따라 지원 기능 및 범위가 조금씩 다르며 ORACLE 9i 이상부터는 비트맵조인인덱스도 지원한다.

'Database > Oracle' 카테고리의 다른 글

Architecture  (0) 2010.05.04
도메인 인덱스(Domain Index)  (0) 2010.04.28
함수기반 (Function Based) 인덱스의 활용  (0) 2010.04.28
비-트리 인덱스(B-Tree Index)  (0) 2010.04.27
Db file sequential read  (0) 2010.04.26
1. 컬럼의 중간 부분의 검색

    create index from_loc_idx on orders (substr(ship_id,5,3));
    create index repair_loc_idx on orders (substr(ship_id,3,2), ord_date);


2. 조인 연결고리 컬럼이 대응하지 않는 경우의 해결


  ......

    from  item_group x, items y
    where x.class1||x.class2||x.class3 = y.group_cd ......
   
    ......
    from  item_gropu x, items y
    where x.class1 = substr(y.group_cd,1,2)
    and   x.class2 = substr(y.group_cd,3,2)
    and   x.class3 = substr(y.group_cd,5,3)
    ......
 
    create index group_cd_idx_ on item_group (class1||class2||class3);


3. 일자 컬럼이 분할된 경우의 해결

    where sal_yyyy >= '2005' and sal_mm >= '12' and sal_dd >= '10'    (x)
    where sal_yyyy||sal_mm||sal_dd >= '20051210'                           (o)  문제점 : Index 사용불가

    create index sal_date_idx on sales (sal_yyyy||sal_mm||sal_dd);
 

4. 데이타 타입이 상이한 조인 컬럼

    create index deptno_idx on emp(to_number(deptno));


5. 조인 컬럼이 경우에 따라 달라지는 경우

    .......
    from  sales s, department d
    where d.deptno = (case when sal_type = 1 then sal_dept else agent_no end)
    and   d.location = 'BUSAN'
    .......
 
    create index deptno_idx on sales
           (case when sal_type = 1 then sal_dept else agent_no end);
          
     
6. 대/소문자나 공백이 혼재된 컬럼의 검색

    create index ename_upper_ix on employees (upper(ename));
 
    create index ename_upper_ix on employees (upper(replace(ename,' '));


7. NULL 값을 치환하여 검색

    .....
    where  :input_date between start_date and nvl(end_date, '99991231');
    .....
   
    create index end_date_idx on account_history (nvl(end_date, '99991231'), start_date);


8. 복잡한 계산 결과의 검색

    create index order_amount_idx on order_items
        (item_cd, (order_price - nvl(order_discount,0)) * order_count));
       
    select /*+ index_desc(x order_amount_idx) */ *
    from   order_items x
    where  item_cd = :b1
    and    rownum <= 100;


9. 기간, 컬럼 길이 검색

    create index item_idx on activities (expire_date - start_date);
   
    create index source_length_idx on print_media (text_length(source_text));


10. 배타적 관계의 유일성 보장

    create unique index official_id_idx on customers
          (case when cust_type = 1 then resident_id else business_id end);
      
    select * from customers
    where (case when cust_type = 1 then resident_id else business_id end) = :b1;


함수기반 인덱스는 버전에 따라 제약사항에 차이가 있으므로 관련 메뉴얼을 참조하세요.


<참조> 새로쓴 대용량 데이타베이스 솔루션

'Database > Oracle' 카테고리의 다른 글

도메인 인덱스(Domain Index)  (0) 2010.04.28
비트맵 인덱스(Bitmap Index)  (0) 2010.04.28
비-트리 인덱스(B-Tree Index)  (0) 2010.04.27
Db file sequential read  (0) 2010.04.26
USER_CONS_COLUMNS  (0) 2010.04.22


작가 : 공지영

좀 예전에 나온 책이긴한데.. 한번 봐야지 하고 차일피일 미루던 책이다.
사실 그냥 제목이 촘.. 그래서.. 그닥 확 땡기진 않았는데..
도서관에 마침 있길래 내용도 보지 않고 그냥 집어서 빌린 책

뭐 공지영 작가 책을 첨 읽는 건 아니라.. 흡인력이 있는 ..
개인적으로 좋아하는 문체니.. ㅋㅋㅋ
사실 좀 꾸미는 문장들이 없진 않지만 그래도 이정도는.. ㅋㅋ
직설적으로 적은 책들을 좋아하다 보니.. ㅋㅋ

음.. 내용은 생각지도 못했던 그런 내용..
정말 생각없이 읽기 시작한 책인데...
주제가 다소 좀 놀란...
장애를 가지고 있는 아이들이 생활하는 보호 시설..
거기서 그 시설에 힘있는 자들이 행하는 폭력...
그리고 국가 공무원들의 만행... 돈..
실제로도 있을 법한 일..
아직 다 읽지는 못해서 결말까지는 모르겠지만..
현실에서는 정의가 모두 이기지는 못하지만.. 책.. 소설 속에서는 정의가 이길까?
지금 회산데... 사실 업무보다는 책이 땡긴다.. ㅋㅋㅋ

'Story > BookClub[1,000]' 카테고리의 다른 글

책 찾아볼꺼~  (0) 2012.02.01
[Book] 천년의 금서  (0) 2010.04.28
난 금성인....  (0) 2010.03.21
헌책방에서 찾아볼 책  (0) 2010.01.26
[Book]빨간머리앤이 어렸을 적에  (0) 2009.12.30

다른 부위에 비해 빼기가 쉽지 않아, 식이요법과 운동 병행해야 


허벅지 비만의 원인은 여러 가지입니다. 유전적인 요인, 혈액 순환 부족에 따른 노폐물 적체, 잘못된 식습관 등이 두꺼운 허벅지의 ‘창조자’입니다. 허벅지 살은 다른 부위에 비해 빼기가 쉽지 않습니다. 식이요법과 적절한 운동을 병행해야 합니다. 다음은 탄력 있고 날씬한 허벅지를 만드는 데 도움을 주는 동작입니다.

 

 

  • 두 무릎이 맞닿도록 앉았다 일어나기 반복

    두 발을 어깨 넓이로 벌린 뒤 무릎이 맞닿도록
    다리를 굽히며 천천히 앉았다가 일어납니다.

  • 두 다리 벌리고 앉았다 일어나기 반복

    1번 동작에 이어서 두 발끝을 몸 바깥쪽으로 향하게 한 뒤 천천히 앉았다 일어납니다.
    두 동작을 이어서 10여 차례 반복합니다.

  • 두 다리 벌리고, 한 쪽으로 허리 숙여주기

    두 발을 벌리고 선 뒤 상체를 왼쪽으로 틀어서
    두 손을 왼쪽 발쪽으로 따라 내려가면서 허리를 숙입니다. 이때 머리는 들어줍니다. 반대로도 합니다.
    서너 차례 반복합니다.

  • 고개는 세우고 상체 앞으로 숙이기

    두 발을 벌리고 서서 두 손을 제봉선을 따라서 내려가며
    상체를 앞으로 숙입니다. 이 때 머리는 정면을 향하고
    잠시 후에 상체를 천천히 일으킵니다.

  • 상체 뒤로 젖히기

    4번 동작에 이어서 두 손을 엉덩이 쪽에 갖다 대고
    오금쪽으로 내리면서 무릎을 편 채로 허벅지를 앞으로
    밀어 넣고 상체를 뒤로 젖힙니다.
    두 동작을 이어 서너 차례 반복합니다.


'Etc > Scrap' 카테고리의 다른 글

흙도 부드러워야 좋다  (1) 2010.05.04
비교  (1) 2010.04.29
당신의 길을 가라  (1) 2010.04.22
단 한 사람 때문에  (1) 2010.04.21
지금, 여기  (0) 2010.04.15

+ Recent posts