[Hint]조인 방법 변경(DRIVING_SITE)
분산환경(DB Link를 이용하는 경우)에서 쿼리를 사용하는 경우 일반적으로 SQL 실행의 주체는 해당 Query를 실행시킨 로컬데이터 베이스가 됩니다. 즉 원격지의 DEPT 테이블의 데이터를 로컬로 가져와서 조인을 하는 것은 로컬에서 하게 되구요… 참고로 이 힌트의 경우 Cost-Based Optimizer 또는 Rule-Based Optimizer환경 모두에서 사용 가능 합니다.
[형식]
/*+ DRIVING_SITE ( table ) */
SQL>select e.empno, e.ename, e.sal, d.dname, d.loc
from emp e, dept@remote_db d ? 요기 DB Link 사용했습니다.
where e.deptno = d.deptno;
Execution plan
-------------------------------------------------------------------
SELECT STATEMENT Optimizer=CHOOSE
NESTED LOOPS
REMOTE remote_db
TABLE ACCESS (BY INDEX ROWID) of ‘EMP’
INDEX (RANGE SCAN) OF ‘idx_emp_deptno’ (NON-UNIQUE)
SERIAL_FROM_REMOTE SELECT “DEPTNO”, “DNAME”, “LOC” FROM “DEPT” “D……
DRIVING_SITE 힌트를 사용하면 인자로 취한 테이블이 위치한 원격지에서 조인이 일어나게 할 수 있는데 즉 아래의 실행 계획을 보면 위에서와는 달리 SELECT STATEMENT 부분에 REMOTE라는 것이 보일 겁니다. 즉 다음의 쿼리는 원격지에서 주도해서 그곳에서 조인이 일어났음을 알 수 있습니다.
SQL>select /*+ driving_site(d) */ e.empno, e.ename, e.sal, d.dname, d.loc
From emp e, dept@remote_db d
Where e.deptno = d.deptno;
Execution plan
-------------------------------------------------------------------
SELECT STATEMENT(REMOTE) Optimizer=CHOOSE
MERGE JOIN
SORT (JOIN)
TABLE ACCESS (FULL) of ‘DEPT’
SORT (JOIN)
REMOTE*
SERIAL_FROM_REMOTE SELECT “EMPNO”, “ENAME”, “SAL” FROM ……
분산 환경의 쿼리를 실행하는 경우 그쪽의 DB사양이나 시스템 사양이 좋다면 DRIVING_SITE 힌트를 이용하여 그곳에서 드라이빙이 일어나게 할 수 있습니다.
[예]
SELECT /*+DRIVING_SITE(departments)*/ *
FROM employees, departments@rsite
WHERE employees.department_id = departments.department_id;
'프로그래밍 > oracle' 카테고리의 다른 글
oracle - [Hint]조인 방법 변경(HASH_SJ) (0) | 2012.08.17 |
---|---|
oracle - [Hint]조인 방법 변경(HASH_AJ) (0) | 2012.08.17 |
oracle - [Hint]옵티마이저(Optimizer) 개요 (0) | 2012.08.17 |
oracle - [Hint]오라클 힌트란? (0) | 2012.08.17 |
oracle - [Hint]비용기반 옵티마이저(Cost-Based Optmizer) (0) | 2012.08.17 |