2014년 2월 4일 화요일

[SQL groupby 튜닝]오라클 구체화뷰(Oracle MATERIALIZED VIEW, MVIEW)를 이용한 GROUP함수 튜닝, 부서의 급여 최소값을 갖는 직원 추출

[SQL groupby 튜닝]오라클 구체화뷰(Oracle MATERIALIZED VIEW, MVIEW)를 이용한 GROUP함수 튜닝, 부서의 급여 최소값을 갖는 직원 추출
 
-- 실습테이블 생성
create table myemp1
(empno number not null primary key,
ename varchar2(100),
deptno number,
addr varchar2(100),
sal number
)

- 테이블에 대략 2000만건 데이터 입력 후

-- 인덱스 생성
create index idx_myemp1_deptno_sal on myemp1(sal, deptno)
 
-- 통계정보 생성
analyze table myemp1 compute statistics
 
-- 부서의 최소급여 받는 사원 추출, 약 40초
SELECT /*+ index(A idx_myemp1_sal_dept) */
      ENAME, SAL, ADDR
FROM myemp1 A
WHERE sal = (SELECT MIN(SAL)
                    FROM myemp1 B
                    WHERE B.DEPTNO = A.DEPTNO);
 
-- 구체화뷰(mview) 생성
CREATE MATERIALIZED VIEW m7
    BUILD IMMEDIATE
    REFRESH
    COMPLETE     
    ON DEMAND 
    ENABLE QUERY REWRITE
    AS
    select
          deptno, min(sal) avgsal from myemp1
    group by deptno
   
-- 바로 나옴
SELECT /*+ index(A idx_myemp1_sal_dept) */
      ENAME, SAL, ADDR
FROM myemp1 A, m7
WHERE A.SAL = m7.avgsal
 and  A.deptno = m7.deptno 

댓글 없음:

댓글 쓰기