[오라클11g에서 비트맵인덱스를 이용한 count, or 연산 튜닝, oracle bitmap index SQL tuning]
oracle 11g에서...
myemp1 테이블의 구조는 다음과 같다.
SQL> desc myemp1
이름 널? 유형
----------------------------------------- -------- -------------------
EMPNO NOT NULL NUMBER
ENAME VARCHAR2(100)
DEPTNO VARCHAR2(1)
ADDR VARCHAR2(100)
SAL NUMBER
SUNGBYUL VARCHAR2(1)
데이터는 2000만건 정도 있으며, 현재 인덱스는 없다.
-- 10여초 이상
select count(*) from myemp1
-- 이것도 10여초 이상
select count(*) from myemp1
where deptno = 1
or deptno = 4
1. b*tree 인덱스 생성
create index idx_myemp1_deptno on myemp1(deptno)
--8.9초(index fast full scan)
select count(deptno) from myemp1
where deptno = 1
or deptno = 4
-- 16초
select count(*) from myemp1
where deptno = 1
or deptno = 4
-- 9초정도 index fast full scan
select /*+ index_ffs(myemp1 idx_myemp1_deptno) */ count(deptno) from myemp1
where deptno = 1
or deptno = 4
2. bitmap 인덱스 생성
create bitmap index idx_myemp1_deptno on myemp1(deptno)
--0초(비트맵인덱스 이용)
select count(deptno) from myemp1
where deptno = 1
or deptno = 4
select count(*) from myemp1
쿼리역시 비트맵 인덱스를 이용하여 0초
물론 비트맵 인덱스가 이러한 장점만 있는것은 아니다. DML이 발생하면
같은 값을 가지는 모든 레코드에 락이 걸린다는점 유념하자.
댓글 없음:
댓글 쓰기