Oracle/Internal View2018. 3. 2. 09:23

VW_FOJ 인터널 뷰를 살펴보자.


테스트를 위해 아래와 같이 테이블을 생성하자.

-- 1
DROP TABLE t1 PURGE;
DROP TABLE t2 PURGE;

CREATE TABLE t1 (c1 NUMBER);
CREATE TABLE t2 (c1 NUMBER);

아래 쿼리에서 VW_FOJ 인터널 뷰를 확인할 수 있다. FOJ는 Full Outer Join의 약어다. 해당 쿼리 변환은 10.2.0.3 버전에 추가된 것으로 보인다.[각주:1]

-- 2
ALTER SESSION SET "_optimizer_native_full_outer_join" = force;

SELECT *
  FROM t1 a
  FULL OUTER
  JOIN t2 b
    ON (b.c1 = a.c1);

------------------------------------------
| Id  | Operation             | Name     |
------------------------------------------
|   0 | SELECT STATEMENT      |          |
|   1 |  VIEW                 | VW_FOJ_0 |
|*  2 |   HASH JOIN FULL OUTER|          |
|   3 |    TABLE ACCESS FULL  | T1       |
|   4 |    TABLE ACCESS FULL  | T2       |
------------------------------------------

NO_NATIVE_FULL_OUTER_JOIN 힌트를 사용하면 OUTER 조인과 ANTI 조인의 결과를 UNION ALL하는 예전의 실행계획으로 수행되는 것을 확인할 수 있다.

-- 3
SELECT /*+ NO_NATIVE_FULL_OUTER_JOIN */
       *
  FROM t1 a
  FULL OUTER
  JOIN t2 b
    ON (b.c1 = a.c1);

-------------------------------------
| Id  | Operation            | Name |
-------------------------------------
|   0 | SELECT STATEMENT     |      |
|   1 |  VIEW                |      |
|   2 |   UNION-ALL          |      |
|*  3 |    HASH JOIN OUTER   |      |
|   4 |     TABLE ACCESS FULL| T1   |
|   5 |     TABLE ACCESS FULL| T2   |
|*  6 |    HASH JOIN ANTI    |      |
|   7 |     TABLE ACCESS FULL| T2   |
|   8 |     TABLE ACCESS FULL| T1   |
-------------------------------------


  1. 10.2.0.5 버전부터 풀 아우터 조인이 Native Full Outer Join으로 수행된다. [본문으로]

'Oracle > Internal View' 카테고리의 다른 글

VW_JF 인터널 뷰  (0) 2018.03.02
VW_GBC 인터널 뷰, VW_GBF 인터널 뷰  (0) 2018.03.02
VW_DTP 인터널 뷰  (0) 2018.03.01
VW_DCL 인터널 뷰  (0) 2018.01.12
VW_DAG 인터널 뷰  (0) 2018.01.04
Posted by 정희락_