반응형

'조인조건(Join Predicate) Pushdown'은 말 그대로 조인 조건절을 뷰 쿼리 블록 안으로 밀어 넣는 것으로서 NL Join 수행 중에 드라이빙 테이블에서 읽은 조인 칼럼 값을 Inner 쪽(=right side) 뷰 쿼리 블록 내에서 참조할 수 있도록 하는 기능이다.

 

---------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------

 

1차 단계

 SELECT D.DEPTNO, D.DNAME, E.AVG_SAL

 FROM DEPT D

, (SELECT DEPTNO, AVG(SAL) AVG_SAL FROM EMP GROUP BY DEPTNO) E

 WHERE E.DEPTNO(+) = D.DEPTNO;

 

2차 단계

 SELECT D.DEPTNO, D.DNAME

, (SELECT AVG(SAL) FROM EMP WHERE DEPTNO = D.DEPTNO)

 FROM DEPT D;

 

---------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------

 

1차 단계 - 집계함수가 여러 개이면 EMP에서 같은 범위를 반복적으로 액세스하는 비효율이 생긴다.

 SELECT D.DEPTNO, D.DNAME

, (SELECT AVG(SAL) FROM EMP WHERE DEPTNO =  D.DEPTNO) AVG_SAL

, (SELECT MIN(SAL) FROM EMP WHERE DEPTNO = D.DEPTNO) MIN_SAL

, (SELECT MAX(SAL) FROM EMP WHERE DEPTNO = D.DEPTNO) MAX_SAL

 FROM DEPT D;

 

2차 단계 - 구하고자 하는 값들을 모두 결합하고서 바깥쪽 액세스 쿼리에서 SUBSTR함수로 분리하는 방법이 유용할 수 있다.

SELECT DEPTNO, DNAME

, TO_NUMBER(SUBSTR(SAL, 1, 7)) AVG_SAL

, TO_NUMBER(SUBSTR(SAL, 8, 7)) MIN_SAL

, TO_NUMBER(SUBSTR(SAL, 15)) MAX_SAL

FROM (

SELECT /*+ no_merge */ D.DEPTNO, D.DNAME

,(SELECT LPAD(AVG(SAL), 7) || LPAD(MIN(SAL), 7) || MAX(SAL)

FROM EMP WHERE DEPTNO = D.DEPTNO) SAL

FROM DEPT D

);

반응형