실행계획 SQL연산(OUTER JOIN)
Outer Join이란 드라이빙 테이블과 조인되는 테이블에 조건을 만족하는 데이터가 없더라도 드라이빙 테이블의 데이터를 출력하는 조인의 방식입니다. (흔히 오라클인 경우 꼭 나타나야 하는 반대쪽에 더하기 표시를 합니다.)
즉 Outer Join에서 (+) 표시가 붙지 않은 테이블이 드라이빙 테이블이 되는 거죠~
SQL> SELECT E.ENAME 사원명,
M.ENAME 관리자,
E.SAL 급여
FROM EMP E, EMP M
WHERE E.MGR = M.EMPNO(+);
Execution Plan
-------------------------------------------------------------------
SELECT STATEMENT Optimizer=CHOOSE
NESTED LOOP(OUTER)
TABLE ACCESS (FULL) OF ‘EMP’ -? Alias ‘E’
TABLE ACCESS (BY INDEX ROWID) OF ‘EMP’ -? Alias ‘M’
INDEX (UNIQUE SCAN) OF ‘pk_emp’ (UNIQUE)
Outer Join의 경우 NESTED LOOP, MERGE JOIN, HASH JOIN과 동반하여 나타나는데 아래는 Merge Join과 Outer Join이 같이 나타나는 경우의 예입니다.
SQL> SELECT /*+ USE_MERGE(E, M) */
E.ENAME 사원명,
M.ENAME 관리자,
E.SAL 급여
FROM EMP E, EMP M
WHERE E.MGR = M.EMPNO(+);
Execution Plan
-------------------------------------------------------------------
SELECT STATEMENT Optimizer=CHOOSE
MERGE JOIN(OUTER)
SORT (JOIN)
TABLE ACCESS (FULL) OF ‘EMP’ -? Alias ‘E’
SORT (JOIN)
TABLE ACCESS (FULL) OF ‘EMP’ -? Alias ‘M’
'프로그래밍 > oracle' 카테고리의 다른 글
oracle - 실행계획 해석하기(Nested Loops Join) (0) | 2012.08.17 |
---|---|
oracle - 실행 계획 해석하기(1) (0) | 2012.08.17 |
oracle - 실행계획 SQL연산(NESTED LOOP) (0) | 2012.08.17 |
oracle - 실행계획 SQL연산(MERGE SEMI JOIN) (0) | 2012.08.17 |
oracle - 실행계획 SQL연산(MERGE JOIN) (0) | 2012.08.17 |