메인 쿼리에 DB 링크를 사용하면 JPPD가 동작하지 않는 것으로 보인다. 아래는 예전에 쓴 JPPD에 대한 글이다.
테스트를 위해 아래와 같이 테이블을 생성하자.
-- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; DROP TABLE t3 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER); CREATE TABLE t2 (c1 NUMBER, c2 NUMBER); CREATE TABLE t3 (c1 NUMBER, c2 NUMBER); CREATE INDEX t3_x1 ON t3 (c1);
t1 테이블에 DB 링크를 사용했고, c 인라인 뷰는 DB 링크를 사용하지 않은 t2 테이블과 조인했으나 JPPD가 동작하지 않는 것을 확인할 수 있다.
-- 2 SELECT /*+ ORDERED USE_NL(C) PUSH_PRED(C) */ * FROM t1@dl1 a , t2 b , (SELECT /*+ NO_MERGE */ c1 , COUNT (*) AS cnt FROM t3 GROUP BY c1) c WHERE b.c1 = a.c1 AND c.c1 = b.c1; ----------------------------------------------------- | Id | Operation | Name | Inst |IN-OUT| ----------------------------------------------------- | 0 | SELECT STATEMENT | | | | | 1 | NESTED LOOPS | | | | |* 2 | HASH JOIN | | | | | 3 | REMOTE | T1 | DL1 | R->S | | 4 | TABLE ACCESS FULL | T2 | | | |* 5 | VIEW | | | | | 6 | SORT GROUP BY | | | | | 7 | TABLE ACCESS FULL| T3 | | | -----------------------------------------------------
-- 3 SELECT /*+ ORDERED USE_NL(C) PUSH_PRED(C) */ * FROM t1@dl1 a , t2 b , LATERAL (SELECT /*+ NO_MERGE */ , COUNT (*) AS cnt FROM t3 x WHERE x.c1 = b.c1 GROUP BY x.c1) c WHERE b.c1 = a.c1; --------------------------------------------------------------- | Id | Operation | Name | Inst |IN-OUT| --------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | 1 | NESTED LOOPS | | | | |* 2 | HASH JOIN | | | | | 3 | REMOTE | T1 | DL1 | R->S | | 4 | TABLE ACCESS FULL| T2 | | | | 5 | VIEW | VW_LAT_A18161FF | | | | 6 | SORT GROUP BY | | | | |* 7 | INDEX RANGE SCAN| T3_X1 | | | ---------------------------------------------------------------
'Oracle > Tuning' 카테고리의 다른 글
분산 쿼리와 서브 쿼리 팩토링 (0) | 2020.02.11 |
---|---|
JPPD와 분석 함수 (0) | 2020.02.11 |
소트 머지 조인의 조인 조건에 따른 수행 방식 차이 (0) | 2019.12.28 |
계층 코드와 예상 카디널리티 (0) | 2019.12.27 |
스칼라 서브 쿼리의 버퍼 Pinning 효과 (0) | 2019.12.24 |