반응형

 

1. 비트맵 인덱스는 Lock에 의한 DML 부하가 심하다.

   - 레코드 하나만 변경되더라도 해당 비트맵 범위에 속한 모든 레코드에 Lock이 걸린다.

   - OLTP성 환경에 비트맵 인덱스를 쓸수 없다.

   - 읽기 위주의 대용량 DW(특히, OLAP) 환경에 아주 적합하다.

  

2. Oracle B*Tree 인덱스와 달리 비트맵 인덱스는 NULL도 저장

  

       SELECT * FROM 상품

WHERE 색상 IS NULL

;

 

---------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------

 

 칼럼의 Distinct Value 개수가 적을 때 비트맵 인덱스를 사용하면 저장효율이 매우 좋다. B*Tree 인덱스보다 훨씬 적은 용량을 차지하므로 인덱스가 여러 개 필요한 대용량 테이블에 유용하다. 다양한 분석관점(Dimension)을 가진 팩트성 테이블이 주로 여기에 속한다. 반대로 Distinct Value가 아주 많은 칼럼이면 오히려 B*Tree 인덱스보다

많은 공간을 차지한다.

 

 Distinct Value 개수가 적은 칼럼일 때 저장효율이 좋지만 테이블 Random 액세스 발생 측면에서는 B*Tree 인덱스와 똑같기 때문에 그런 칼럼을 비트맵 인덱스로 검색하면 그다지 좋은 성능을 기대하기 어렵다. 스캔할 인덱스 블록이 줄어도는 정도의 성능 이점만 얻을 수 있고, 따라서 하나의 비트맵 인덱스 단독으로는 쓰임새가 별로 없다. 그 대신, 여러 비트맵 인덱스를 동시에 사용할 수 있는 특징 때문에 대용량 데이터 검색 성능을 향상시키는 데에 효과가 있다.

 

 비트맵 인덱스는 여러 인덱스를 동시에 활용할 수 있다는 장점 때문에 다양한 조건이 사용되는, 특히 정형화되지 않은 임의 질의(ad-hoc query)가 많은 환경에 적합하다.

 

SELECT 지역, SUM(판매량), SUM(판매금액)

FROM 연도별지역별상품매출

WHERE (크기 = 'SMALL' OR 크기 IS NULL)

AND 색상 = 'GREEN'

AND 출시연도 = '2012'

GROUP BY 지역

;

 

 

반응형