조인 조건(Join Predicate) Pushdown - SQL전문가 가이드 p.582~p.584
개발 및 관리/Oracle 9i, 10g, 11g, 12c, 19c 2012. 10. 24. 11:57'조인조건(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
);
'개발 및 관리 > Oracle 9i, 10g, 11g, 12c, 19c' 카테고리의 다른 글
OR조건을 Union으로 변환 - SQL전문가 가이드 p.587-p.588 (0) | 2012.10.24 |
---|---|
불필요한 조인 제거 - SQL전문가 가이드 p.585~p.587 (0) | 2012.10.24 |
SQL 가이드, Oracle 가이드, MS-SQL 가이드 (0) | 2012.08.28 |
JOIN QUERY,TO_CHAR(SYSDATE,'YYYYMMDD') (0) | 2012.07.16 |
GRANT 권한, NULL 관련해서 명확히 동작원리를 이해, 오라클 통계쿼리 시간별, 일별, 월별, 년도별 (0) | 2012.07.16 |