VW_LAT 인터널 뷰를 살펴보자.
테스트를 위해 아래와 같이 테이블을 생성하자.
-- 1 DROP TABLE t1 PURGE; DROP TABLE t2 PURGE; CREATE TABLE t1 (c1 NUMBER); CREATE TABLE t2 (c1 NUMBER, c2 NUMBER, c3 NUMBER); CREATE INDEX t2_x1 ON t2 (c1);
테스트 전에 _optimizer_ansi_join_lateral_enhance 파라미터를 false로 설정하자. 해당 파라미터는 VW_DCL 인터날 뷰와 관련이 있다. 아래 쿼리의 실행 계획에서 VW_LAT 인터널 뷰를 확인할 수 있다. LAT는 LATeral의 약어다. Lateral View는 12.1 버전부터 사용할 수 있다.
-- 2 ALTER SESSION SET "_optimizer_ansi_join_lateral_enhance" = false; SELECT a.c1, b.c3 FROM t1 a , LATERAL (SELECT MAX (b.c3) AS c3 FROM t2 b WHERE b.c1 = a.c1 GROUP BY b.c2) b; ------------------------------------------------------------------ | Id | Operation | Name | ------------------------------------------------------------------ | 0 | SELECT STATEMENT | | | 1 | NESTED LOOPS | | | 2 | TABLE ACCESS FULL | T1 | | 3 | VIEW | VW_LAT_A18161FF | | 4 | SORT GROUP BY | | | 5 | TABLE ACCESS BY INDEX ROWID BATCHED| T2 | |* 6 | INDEX RANGE SCAN | T2_X1 | ------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 6 - access("B"."C1"="A"."C1")
QT는 위 쿼리를 아래 쿼리로 변환한다.
-- 3 SELECT a.c1, vw_lat_a18161ff.c3 FROM t1 a , LATERAL (SELECT MAX (b.c3) AS c3 FROM t2 b WHERE b.c1 = a.c1 GROUP BY b.c2) vw_lat_a18161ff;
ANSI 아우터 조인에 OR 일반 조건이 포함된 경우에도 해당 쿼리 변환이 발생할 수 있다.
-- 4 SELECT a.c1, b.c2 FROM t1 a LEFT OUTER JOIN t2 b ON b.c1 = a.c1 AND ( b.c2 = 1 OR b.c3 BETWEEN 1 AND 2); ------------------------------------------------------------------ | Id | Operation | Name | ------------------------------------------------------------------ | 0 | SELECT STATEMENT | | | 1 | MERGE JOIN OUTER | | | 2 | TABLE ACCESS FULL | T1 | | 3 | BUFFER SORT | | | 4 | VIEW | VW_LAT_2E38C6CE | |* 5 | TABLE ACCESS BY INDEX ROWID BATCHED| T2 | |* 6 | INDEX RANGE SCAN | T2_X1 | ------------------------------------------------------------------
QT는 직전 쿼리를 아래 쿼리로 변환한다.
-- 5 SELECT a.c1, vw_lat_2e38c6ce.c2 FROM t1 a , LATERAL (SELECT b.c2 FROM t2 b WHERE b.c1 = a.c1 AND ( b.c2 = 1 OR b.c3 >= 1 AND b.c3 <= 2))(+) vw_lat_2e38c6ce;
'Oracle > Internal View' 카테고리의 다른 글
VW_ORE 인터널 뷰 (0) | 2018.03.02 |
---|---|
VW_NSO 인터널 뷰 (0) | 2018.03.02 |
VW_JF 인터널 뷰 (0) | 2018.03.02 |
VW_GBC 인터널 뷰, VW_GBF 인터널 뷰 (0) | 2018.03.02 |
VW_FOJ 인터널 뷰 (0) | 2018.03.02 |