오라클/Tuning

Driving Table 이란?

빵순이^^ 2010. 5. 16. 17:14

Driving Table 이란?

TABLE에 대한 JOIN시 먼저 ACCESS되서 ACCESS PATH를 주도하는 TABLE을 DRIVING TABLE이라 한다.

DRIVING TABLE로 결정되는 것은 INDEX의 존재 및 우선순위 혹은 FROM절에서의 TABLE지정순서에 영향을 받으며 어느 TABLE이 먼저 ACCESS되느냐에 따라 속도의 차이가 크게 날 수 있으므로 매우 중요하다. 기본적으로 대상 TABLE의 행 중 작업대상이 되는 행의 수 가 적은 쪽이 먼저 ACCESS되어야 전체 일 양이 줄어든다.

Driving table의 결정 규칙은 다음과 같다.

JOIN 되는 컬럼의 한쪽에만 INDEX가 있는 경우는 INDEX가 지정된 TABLE이 DRIVING TABLE이 된다.
WHERE emp.deptno = dept.deptno 문장에서 dept.deptno에 index가 있는 경우는 Dept 테이블이드라이빙 테이블이 된다.
WHERE emp.deptno = dept.deptno 문장에서 emp.deptno에 index가 있는 경우는 Emp 테이블이 드라이빙 테이블이 된다.

WHERE emp.deptno = dept.deptno
AND emp.empno=7788
AND loc like 'Ca%'

deptno, empno 컬럼이 조합해서 인덱스 . loc와 deptno컬럼이 조합해서 인덱스가 이루어져 있는경우 Dept 테이블이 드라이빙 테이블이 되고 만일 인덱스가 empno와 deptno컬럼이 조합해서 인덱스, deptno와loc컬럼이 조합해서 인덱스로 구성되어 있으면 Emp 테이블이 드라이빙 테이블이 된다.

조건절에 두 테이블 조인 조건외에 다른 비교 조건이 지정된 경우 INDEX의 우선순위에 따라 먼저 수행된는 테이블이
드라이빙 테이블이 된다.

WHERE emp.deptno = dept.deptno
AND emp.empno = 1166
AND dept.loc like 'da%'

emp.deptno, dept.deptno, empno,loc에 인덱스가 있는 경우는 empno와 loc중 우선순위가 높은 empno 인덱스를 먼저 사용하여 검색한다. 만일 이때 loc 라는 인덱스를 사용하고 싶으면 emp.empno=1166을 rtrim(empno)=1166 로 바꾸어 사용하면 empno의 인덱스 사용을 억제할수 있다.

더욱 이해를 돕기위해 다음의 예를 살펴보자.

DEPT.DEPTNO 컬럼에 Unique 인덱스 LOC 컬럼에 Unique 인덱스 EMP.JOB 과 EMP.ENAME 컬럼을 조합한 Unique Index EMP.DEPTNO 에 인덱스 가 있다고 가정하자

WHERE d.deptno = e.deptno AND job='PRESIDENT'
AND ename='KING' AND loc='NEW YORK'
AND dname='ACCOUNTING'

의 문장 수행을 위한 내부적인 수행은 다음과 같다.

만일 DEPT 테이블이 드라이빙 테이블이라면

loc='NEW YORK'
dname = 'ACCOUNTING'

만일 EMP 테이블이 드라이빙 테이블이라면

job= 'PRESIDENT'
ename =' KING'

이다.

즉 DEPT 테이블이 unique 인덱스 를 사용하고 EMP 테이블은 컬럼이 조합된 unique 인덱스를 사용하므로 우선순위가  높은 DEPT 테이블이 DRIVING TABLE이 된다.

출처 : Tong - 다정이앤님의 DB통

'오라클 > Tuning' 카테고리의 다른 글

SQL*Plus의 Autotrace 활용  (1) 2010.08.13
ASMM (Automatic Shared Memory Management)  (3) 2010.06.05
Nested Loop 예제  (0) 2010.05.16
select * from t1 sort ? ㅋ  (0) 2010.05.09
Nested Loop  (0) 2010.05.08