실행계획 SQL연산(MERGE
JOIN)
실무중심 오엔제이프로그래밍실무교육센터
Merge Join은 조인 시 각 테이블을 따로 정렬 후 그 결과를 병합(Merge)하는 집합 연산 입니다. 배치성 JOB에는 효율적이나 OLTP성 업무에는 비효율적일 수
있습니다. 집합연산이므로 모든 ROW를 FETCH한 후 처리할 때 까지는 결과를 확인할 수 없기 때문입니다.
보통 조인
컬럼에 인덱스가 존재하지 않을 때 나타나며 NESTED LOOP JOIN , HASH JOIN과 달리
실행 계획상에 나타나는 테이블의 순서는 중요하지 않습니다.
아래의 SQL문장을 보도록 하죠…
(oracle 11g인 경우 rule 힌트를 사용하여 RBO 경우에는 merge join, CBO인 경우 hash join을 이용합니다. 수행시간도 해시 조인이 조금
빠르군요.)
SQL> select count(e.ename)
2 from emptest e, depttest d
3 where to_char(e.deptno) =
to_char(d.deptno);
COUNT(E.ENAME)
--------------
2500000
경 과: 00:00:03.00
Execution Plan
----------------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | SORT AGGREGATE | |
| 2 | MERGE
JOIN | |
| 3 | SORT JOIN | |
| 4 | TABLE ACCESS FULL| DEPTTEST |
|* 5 | SORT JOIN | |
| 6 | TABLE ACCESS
FULL| EMPTEST |
SQL> select count(e.ename)
2 from emptest e, depttest d
3 where to_char(e.deptno) =
to_char(d.deptno);
COUNT(E.ENAME)
--------------
2500000
경 과: 00:00:02.35
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|
Time |
--------------------------------------------------------------------
| 0 | SELECT STATEMENT
| 1 | SORT AGGREGATE
|* 2 | HASH
JOIN
| 3 | TABLE ACCESS FULL| DEPTTEST |
| 4 | TABLE ACCESS FULL| EMPTEST |
댓글 없음:
댓글 쓰기