실행계획 SQL연산(MERGE SEMI JOIN)
SEMI JOIN은 첫번째 Match되는 value를 찾기만 하면 결과를 돌려주는 join 문입니다.
MERGE SEMI JOIN과 HASH SEMI JOIN으로 나타나는데 EXISTS와 같은 Query에서 서브 쿼리 조건에 대한 인덱스가 존재하지 않으면 비효율적인 실행 계획이 세워지게 되는데 이러한 경우 세미 조인을 적절히 이용하면 됩니다.
SQL>SELECT ENAME, SAL
FROM EMP E
WHERE EXISTS ( SELECT /*+ MERGE_SJ */
1
FROM DEPT D
WHERE E.DEPTNO = D.DEPTNO);
Execution Plan
--------------------------------------------------------------
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 SORT (AGGREGATE)
2 1 MERGE JOIN (SEMI)
3 2 SORT (JOIN)
4 3 TABLE ACCESS (FULL) OF ‘EMP’
5 2 SORT (JOIN)
6 5 TABLE ACCESS (FULL) OF ‘DEPT’
7
'프로그래밍 > oracle' 카테고리의 다른 글
oracle - 실행계획 SQL연산(OUTER JOIN) (0) | 2012.08.17 |
---|---|
oracle - 실행계획 SQL연산(NESTED LOOP) (0) | 2012.08.17 |
oracle - 실행계획 SQL연산(MERGE JOIN) (0) | 2012.08.17 |
oracle - 실행계획 SQL연산(MERGE ANTI-JOIN) (0) | 2012.08.17 |
oracle - 실행계획 SQL연산(INLIST ITERATOR) (0) | 2012.08.17 |