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 지역
;
'개발 및 관리 > Oracle 9i, 10g, 11g, 12c, 19c' 카테고리의 다른 글
NL Join의 특징 - SQL전문가 가이드 p.645 (0) | 2012.10.25 |
---|---|
테이블 Random 액세스 최소화 튜닝, 인덱스 스캔범위 최소화 - SQL전문가 가이드 p.628~p.637 (0) | 2012.10.24 |
인덱스 재생성 - SQL전문가 가이드 p.612 (0) | 2012.10.24 |
OR조건을 Union으로 변환 - SQL전문가 가이드 p.587-p.588 (0) | 2012.10.24 |
불필요한 조인 제거 - SQL전문가 가이드 p.585~p.587 (0) | 2012.10.24 |