2016년 12월 13일 화요일

[오라클교육,튜닝교육,SQL교육학원추천_탑크리에듀][오라클11g에서 비트맵인덱스를 이용한 count, or 연산 튜닝, oracle bitmap index SQL tuning]

[오라클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이 발생하면 
같은 값을 가지는 모든 레코드에 락이 걸린다는점 유념하자.

댓글 없음:

댓글 쓰기