2014년 3월 23일 일요일

[B*Tree, Bitmap인덱스 성능비교,오라클인덱스][오라클/ORACLE교육/오라클강좌/구로디지털단지오라클/실무오라클교육/재직자ORACLE교육]

[B*Tree, Bitmap인덱스 성능비교,오라클인덱스][오라클/ORACLE교육/오라클강좌/구로디지털단지오라클/실무오라클교육/재직자ORACLE교육]
 
myemp1 테이블은 2000만건의 데이터 건수를 가지고 있고 컬럼은 6개 정도.
deptno 컬럼에는 0,1,2,3,4 다섯가지 정도의 값들이 분포되어 있다.(분포도 20%)

OR쿼리를 사용했을 때 인덱스없을때, B*TREE 인덱스 있을 때, 비트맵 인덱스를 사용할 때와 비교해 보았다. B*Tree인덱스인 경우 11g에서 index 힌트를 주지 않으면 index fast full scan 했으며 index 힌트를 사용하여 만든 index range scan 보다 성능이 좋지는 않았다.
 
결과상 비트맵인덱스가 좋지만 작은 DML이 있는 테이블이라면 조심해야 한다.

 
결과를 확인해 보자.

1. 인덱스 없을 때  
drop index IDX_MYEMP1_DEPTNO
drop index bidx_myemp1_deptno
--17초
select count(*) from myemp1
where deptno = 0
   or deptno = 4
   or deptno = 2
   
-- 17초   
select count(*) from myemp1
where deptno != 0

2. B*Tree인덱스 있을 때(index_ffs) 
create index IDX_MYEMP1_DEPTNO on myemp1(deptno)

- 0.74초
select
       count(*) from myemp1
where deptno = 0
   or deptno = 4
   or deptno = 2

-- 2.3초(index fast full scan)  
select
       count(*) from myemp1
where deptno != 0
   
   
3. Bitmap인덱스를 이용
drop index BIDX_MYEMP1_DEPTNO(0.03초)
create bitmap index bidx_myemp1_deptno on myemp1(deptno)

-- 0.03초
select
       count(*) from myemp1
where deptno = 0
   or deptno = 4
   or deptno = 2
   
--  0.05초  
select
       count(*) from myemp1
where deptno != 0

댓글 없음:

댓글 쓰기