VW_JF 인터널 뷰를 살펴보자.
테스트를 위해 아래와 같이 테이블을 생성하자.
1 2 3 4 5 6 |
-- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 number); CREATE TABLE t2 (c1 NUMBER, c2 number); |
아래 쿼리의 실행 계획에서 VW_JF 인터널 뷰를 확인할 수 있다. FACTORIZE_JOIN 힌트에서 JF가 Join Factorize의 약자임을 유추할 수 있다. 해당 쿼리 변환은 11.2.0.1 버전에 추가된 것으로 보인다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
-- 2 ALTER SESSION SET "_optimizer_join_factorization" = true ; SELECT a.* FROM t1 a, t2 b WHERE a.c1 = 1 AND b.c2 = a.c2 UNION ALL SELECT a.* FROM t1 a, t2 b WHERE a.c1 = 2 AND b.c2 = a.c2; --------------------------------------------------- | Id | Operation | Name | --------------------------------------------------- | 0 | SELECT STATEMENT | | |* 1 | HASH JOIN | | | 2 | TABLE ACCESS FULL | T2 | | 3 | VIEW | VW_JF_SET$623BBB07 | | 4 | UNION - ALL | | |* 5 | TABLE ACCESS FULL | T1 | |* 6 | TABLE ACCESS FULL | T1 | --------------------------------------------------- Outline Data ------------- FACTORIZE_JOIN(@ "SET$1" ( "B" @ "SEL$1" "B" @ "SEL$2" )) |
QT는 위 쿼리를 아래 쿼리로 변환한다. UNION ALL 연산을 먼저 수행하여 t2 테이블에 대한 액세스를 감소시키는 것이다.
1 2 3 4 5 6 7 8 9 10 11 12 |
-- 3 SELECT vw_jf_set$623bbb07.c1 , vw_jf_set$623bbb07.c2 FROM ( SELECT a.c1, a.c2 FROM t1 a WHERE a.c1 = 1 UNION ALL SELECT a.c1, a.c2 FROM t1 a WHERE a.c1 = 2) vw_jf_set$623bbb07 , t2 b WHERE b.c2 = vw_jf_set$623bbb07.c2; |
NO_FACTORIZE_JOIN 힌트를 사용하면 쿼리 변환을 방지할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
-- 4 SELECT /*+ NO_FACTORIZE_JOIN(@SET$1) */ a.* FROM t1 a, t2 b WHERE a.c1 = 1 AND b.c2 = a.c2 UNION ALL SELECT a.* FROM t1 a, t2 b WHERE a.c1 = 2 AND b.c2 = a.c2; ------------------------------------ | Id | Operation | Name | ------------------------------------ | 0 | SELECT STATEMENT | | | 1 | UNION - ALL | | |* 2 | HASH JOIN | | |* 3 | TABLE ACCESS FULL | T1 | | 4 | TABLE ACCESS FULL | T2 | |* 5 | HASH JOIN | | |* 6 | TABLE ACCESS FULL | T1 | | 7 | TABLE ACCESS FULL | T2 | ------------------------------------ |
'Oracle > Internal View' 카테고리의 다른 글
VW_NSO 인터널 뷰 (0) | 2018.03.02 |
---|---|
VW_LAT 인터널 뷰 (0) | 2018.03.02 |
VW_GBC 인터널 뷰, VW_GBF 인터널 뷰 (0) | 2018.03.02 |
VW_FOJ 인터널 뷰 (0) | 2018.03.02 |
VW_DTP 인터널 뷰 (0) | 2018.03.01 |