2014년 4월 12일 토요일

[오라클 조인 힌트]ORDERED, USE_NL, USE_HASH, USE_MERGE 테스트, ORACLE JOIN HINT ,[ORACLE/SQL/HINT/오라클/교육/강의/강좌/SQL교육/오라클 PLSQL/강의/강좌/오라클교육/ORACLE초보교육/오라클실무강좌]

[오라클 조인 힌트]ORDERED, USE_NL, USE_HASH, USE_MERGE 테스트, ORACLE JOIN HINT ,[ORACLE/SQL/HINT/오라클/교육/강의/강좌/SQL교육/오라클 PLSQL/강의/강좌/오라클교육/ORACLE초보교육/오라클실무강좌]

-- MYEMP1 : 200만건
-- MYDEPT1 : 5건

create index idx_myemp1_deptno on myemp1(deptno)

-- 7초,HASH_JOIN, MYDEPT1 드라이빙
select count(*) from mydept1 d, myemp1 e
where e.deptno = d.deptno

-- mydept1 테이블의 deptno에는 인덱스가 현재 없다.
-- 그래서 mydept1 테이블이 드라이빙
-- 6.34초
select /*+ rule */ count(*) from mydept1 d, myemp1 e
where e.deptno = d.deptno

--이번에는 mydept1의 deptno에 인덱스를 만들자.
create index idx_mydept1_deptno on mydept1(deptno)

-- myemp1, mydept1의 deptno 컬럼모두에 인덱스가 있다.
-- 구 테이블 deptno 인덱스있으면 from절에 멀리 있는 테이블이 드라이빙 테이블
-- 15초, myemp1이 드라이빙 테이블
select /*+ rule */ count(*) from mydept1 d, myemp1 e
where e.deptno = d.deptno

-- 6.3초, mydept1이 드라이빙 테이블
select /*+ ordered use_nl(e) */ count(*) from mydept1 d, myemp1 e
where e.deptno = d.deptno

-- 15초, myemp1이 드라이빙 테이블
select /*+ ordered use_nl(d) */ count(*) from myemp1 e, mydept1 d
where e.deptno = d.deptno

-- 6.5초, mydept1 드라이빙
select /*+ ordered use_hash(e) */ count(*) from mydept1 d, myemp1 e
where e.deptno = d.deptno

-- 17초, myemp1 드라이빙, index fast full scan
select /*+ ordered use_hash(d) */ count(*) from myemp1 e, mydept1 d
where e.deptno = d.deptno

-- 11초, mydept1 드라이빙
select /*+ ordered use_merge(e) */ count(*) from mydept1 d, myemp1 e
where e.deptno = d.deptno

-- 17초, myemp1 드라이빙, index fast full scan
select /*+ ordered use_merge(d) */ count(*) from myemp1 e, mydept1 d
where e.deptno = d.deptno 

댓글 없음:

댓글 쓰기