외부조인(outer join)중 FULL OUTER JOIN을 지원하기 위한 힌트로 Oracle 10g R2에서는 Full Outer Join을 실행하면 Union All로 분리되어 Outer Join과 Anti-Join이 실행된다. _optimizer_nativer_full_outer_join이 off로 되어 있어서 그렇다. 하지만 오라클11g에서는 default로 Force값으로 되어 있기에 Union All 과 Anti Join이 없어졌다.
형식 : /*+ NATIVE_FULL_OUTER_JOIN */
[실습]
실습데이터는 http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecHINT&wr_id=117 참조하여 만들자.
SQ> conn / as sysdba
SQL> alter session set "_optimizer_native_full_outer_join" = force;
세션이 변경되었습니다.
SQL> show parameter "_optimizer_native_full_outer_join"
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_optimizer_native_full_outer_join string FORCE
SQL> conn scott/tiger
연결되었습니다.
SQL> -- full out join 실습을 위해 부서코드가 없는 사원, 사원을 안가지고 있는 부서데이터를 입력
SQL> -- 부서테이블에서 부서는 0부터 4사이 숫자, 사번은 1~2천만번사이값이 현재 있다.
SQL> insert into myemp1(empno, ename, deptno) values (20000002, 'TEST',5);
1 개의 행이 만들어졌습니다.
SQL> insert into mydept1 (deptno, dname) values (6, '부서6');
1 개의 행이 만들어졌습니다.
NATIVE_FULL_OUTER_JOIN 힌트를 주지 않아도 "_optimizer_native_full_outer_join” 파라미터 기본값이 Force이므로 잘 실행된다.
SQL> select count(e.empno)
2 from myemp1 e full outer join mydept1 d
3 on (e.deptno = d.deptno);
경 과: 00:00:23.39
Execution Plan
| 0 | SELECT STATEMENT | | 1 | 13 | 40110 (1)|
| 1 | SORT AGGREGATE | | 1 | 13 | |
| 2 | VIEW | VW_FOJ_0 | 20M| 247M| 40110 (1)|
|* 3 | HASH JOIN FULL OUTER| | 20M| 228M| 40110 (1)|
| 4 | TABLE ACCESS FULL | MYDEPT1 | 5 | 15 | 3 (0)|
| 5 | TABLE ACCESS FULL | MYEMP1 | 20M| 171M| 40008 (1)|
이번에는 alter session set "_optimizer_native_full_outer_join" = false; 로 변경해 놓고 쿼리문을 다시 실행해보자.
SQL> alter session set "_optimizer_native_full_outer_join" = off;
세션이 변경되었습니다.
SQL> select count(e.empno)
2 from myemp1 e full outer join mydept1 d
3 on (e.deptno = d.deptno);
경 과: 00:00:46.61
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time
|
--------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 13 | 80221 (1)|
| 1 | SORT AGGREGATE | | 1 | 13 | |
| 2 | VIEW | | 20M| 247M| 80221 (1)| 00:16:
| 3 | UNION-ALL | | | | |
|* 4 | HASH JOIN RIGHT OUTER| | 20M| 228M| 40110 (1)|
| 5 | TABLE ACCESS FULL | MYDEPT1 | 5 | 15 | 3 (0)|
| 6 | TABLE ACCESS FULL | MYEMP1 | 20M| 171M| 40008 (1)|
|* 7 | HASH JOIN ANTI | | 1 | 6 | 40110 (1)| 00:08:
| 8 | TABLE ACCESS FULL | MYDEPT1 | 5 | 15 | 3 (0)|
| 9 | TABLE ACCESS FULL | MYEMP1 | 20M| 57M| 40008 (1)|
같은 테이블을 두번 씩 질의 하면서 UNION_ALL로 풀었다.
오라클자바커뮤니티에서 운영, 개발자 전문교육, 개인80%환급 오엔제이프로그래밍실무교육센터(www.onjprogramming.co.kr)
평일주간(9:30~18:30) 개강
(4/07)[기업100%환급]SQL기초에서 Schema Object까지
(4/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(4/14)C#4.0,ADO.NET,Network 프로그래밍
(4/14)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(4/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
평일야간(19:00~22:00) 개강
(4/07)SQL초보에서실전전문가까지
(4/08)Spring3.X, MyBatis, Hibernate실무과정
(4/10)C#,ASP.NET마스터
(4/10)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(4/14)웹퍼블리싱 마스터
+ (4/22)안드로이드개발자과정
주말(10:00~18:00) 개강
(4/12)웹퍼블리싱 마스터
(4/12)SQL초보에서실전전문가까지
(4/12)안드로이드개발자과정
(4/12)JAVA기초에서실무까지
(4/19)C#,ASP.NET마스터
(4/19)Spring3.X, MyBatis, Hibernate실무과정
평일주간(9:30~18:30) 개강
(4/07)[기업100%환급]SQL기초에서 Schema Object까지
(4/07)[기업100%환급]자바기초에서 JDBC, Servlet/JSP까지
(4/14)C#4.0,ADO.NET,Network 프로그래밍
(4/14)[기업100%환급]Spring ,MyBatis,Hibernate실무과정
(4/14)[기업100%환급]PL/SQL,ORACLE HINT,TUNING
평일야간(19:00~22:00) 개강
(4/07)SQL초보에서실전전문가까지
(4/08)Spring3.X, MyBatis, Hibernate실무과정
(4/10)C#,ASP.NET마스터
(4/10)자바기초에서JSP,Ajax,jQuery,Spring3.2,MyBatis까지
(4/14)웹퍼블리싱 마스터
+ (4/22)안드로이드개발자과정
주말(10:00~18:00) 개강
(4/12)웹퍼블리싱 마스터
(4/12)SQL초보에서실전전문가까지
(4/12)안드로이드개발자과정
(4/12)JAVA기초에서실무까지
(4/19)C#,ASP.NET마스터
(4/19)Spring3.X, MyBatis, Hibernate실무과정
댓글 없음:
댓글 쓰기