[Hint]조인 방법 변경(LEADING):
구로디지털 오엔제이프로그래밍실무교육센터
오라클 힌트 구문 중 하나인 LEADING 힌트는 두 테이블 조인 시 드라이빙 테이블을 인자로 사용하며, ORDERED와 같이 FROM절 뒤에 오는 테이블의 위치가 중요 합니다.
참고로 ORDERED 힌트는 주로 USE_NL/USE_MERGE/USE_HASH 힌트와 같이 사용되는데 USE_NL/USE_MERGE/USE_HASH 인자로 사용되는 테이블은 FROM절에서 두 번째로 나타나는 테이블 이어야 하며 FROM절에서 처음 나타나는 테이블이 드라이빙 테이블(OUTER/DRIVING TABLE)이 되고 나중에 나타나는 테이블이 PROBED TABLE(INNER TABLE)이 됩니다.
[9i]
SQL>SELECT E.ENAME, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO;
Execution Plan
--------------------------------------------------------------------
SELECT STATEMENT Optimizer=CHOOSE
TABLE ACCESS (BY INDEX ROWID) OF ‘DEPT’
NESTED :namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><st1:place w:st="on">LOOP</st1:place>
TABLE ACCESS (FULL) OF ‘EMP’
INDEX (RANGE SCAN) OF ‘idx_dept_deptno’
위 힌트는 ORDERED를 이용하면 다음과 같이 바꿀 수 있습니다.
SELECT E.ENAME, D.DNAME
FROM EMP E, DEPT D
WHERE E.DEPTNO = D.DEPTNO;
[실습]
- 실습을 위한 예제 테이블 및 데이터는 아래 링크에서 확인 바랍니다.
myemp1 : 1000만건
myemp1_old : 100만건
mydept : 5건
테스트환경 : oracle 11g
n Mydept1이 드라이빙 테이블, myemp1이 내부 테이블(비 드라이빙 테이블)
SQL> select
2 e.ename,
3 d.dname
4 from mydept1 d, myemp1 e
5 where e.deptno = d.deptno ;
20000000 개의 행이 선택되었습니다.
경 과: 00:02:11.23
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 20M| 476M| 169K (1)| 00:33:53 |
| 1 | NESTED LOOPS | | 20M| 476M| 169K (1)| 00:33:53 |
| 2 | TABLE ACCESS FULL| MYDEPT1 | 10 | 100 | 3 (0)| 00:00:01 |
|* 3 | TABLE ACCESS FULL| MYEMP1 | 2000K| 28M| 16939 (1)| 00:03:24 |
------------------------------------------------------------------------------
이번에는 mydept1이 드라이빙, myemp1이 비드라이빙
SQL> select
2 e.ename,
3 d.dname
4 from mydept1 d, myemp1 e
5 where e.deptno = d.deptno ;
20000000 개의 행이 선택되었습니다.
경 과: 00:01:47.94
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 20M| 476M| 17043 (2)| 00:03:25 |
|* 1 | HASH JOIN | | 20M| 476M| 17043 (2)| 00:03:25 |
| 2 | TABLE ACCESS FULL| MYDEPT1 | 10 | 100 | 3 (0)| 00:00:01 |
| 3 | TABLE ACCESS FULL| MYEMP1 | 10M| 143M| 16941 (1)| 00:03:24 |
------------------------------------------------------------------------------
[개강임박강좌, 오프라인교육장에 오시면 보다 자세히 배울 수 있습니다.]
오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주간]
[11/18]Spring3.X, MyBatis, Hibernate실무과정
[11/25]초보자를위한실전SQL
[11/25]안드로이드개발자과정
[11/25]iPhone 하이브리드 앱 개발 실무과정
[평일야간]
[11/19]iPhone하이브리드앱개발실무과정
[11/19]안드로이드개발자과정
[11/21]JAVA&WEB프레임워자실무과정
[11/21]Spring3.X, MyBatis, Hibernate실무과정
[11/27]SQL초보에서실전전문가까지
[주말]
[11/16]JAVA&WEB프레임워크실무과정
[11/16]웹퍼블리싱 마스터
[11/23]SQL초보에서전문가까지
[11/23]C#,ASP.NET마스터
[11/30]PL/SQL,오라클힌트,SQL튜닝,사례연구
[11/31]Spring3.X,MyBatis,Hibernate실무과정
오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr)
[주간]
[11/18]Spring3.X, MyBatis, Hibernate실무과정
[11/25]초보자를위한실전SQL
[11/25]안드로이드개발자과정
[11/25]iPhone 하이브리드 앱 개발 실무과정
[평일야간]
[11/19]iPhone하이브리드앱개발실무과정
[11/19]안드로이드개발자과정
[11/21]JAVA&WEB프레임워자실무과정
[11/21]Spring3.X, MyBatis, Hibernate실무과정
[11/27]SQL초보에서실전전문가까지
[주말]
[11/16]JAVA&WEB프레임워크실무과정
[11/16]웹퍼블리싱 마스터
[11/23]SQL초보에서전문가까지
[11/23]C#,ASP.NET마스터
[11/30]PL/SQL,오라클힌트,SQL튜닝,사례연구
[11/31]Spring3.X,MyBatis,Hibernate실무과정
댓글 없음:
댓글 쓰기