Oracle/Internal View2018. 3. 1. 20:53

이번 글에서는 VW_DTP 인터널 뷰를 살펴보자.


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

-- 1
DROP TABLE t1 PURGE;
DROP TABLE t2 PURGE;
 
CREATE TABLE t1 (c1 NUMBER, c2 number);
CREATE TABLE t2 (c1 NUMBER, c2 number);

아래 쿼리의 실행 계획에서 VW_DTP 인터널 뷰를 확인할 수 있다. PLACE_DISTINCT 힌트에서 DTP가 DisTinct Place의 약어임을 유추할 수 있다. 해당 쿼리 변환은 11.2.0.1 버전에 추가된 것으로 보인다.

-- 2
ALTER SESSION SET "_optimizer_distinct_placement" = true;

SELECT /*+ PLACE_DISTINCT */
       DISTINCT
       a.c2, b.c2
  FROM t1 a, t2 b
 WHERE b.c1 = a.c1;
 
-------------------------------------------------
| Id  | Operation             | Name            |
-------------------------------------------------
|   0 | SELECT STATEMENT      |                 |
|   1 |  HASH UNIQUE          |                 |
|*  2 |   HASH JOIN           |                 |
|   3 |    TABLE ACCESS FULL  | T1              |
|   4 |    VIEW               | VW_DTP_F486F43F |
|   5 |     HASH UNIQUE       |                 |
|   6 |      TABLE ACCESS FULL| T2              |
-------------------------------------------------
 
Outline Data
-------------
      PLACE_DISTINCT(@"SEL$1" "B"@"SEL$1")

QT는 위 쿼리를 아래 쿼리로 변환한다. 조인 대상을 줄이기 위해 조인 전에 DISTINCT를 수행하는 것이다.

-- 3
SELECT DISTINCT
       a.c2, vw_dtp_f486f43f.c2
  FROM (SELECT DISTINCT
               b.c1, b.c2
          FROM t2 b) vw_dtp_f486f43f
     , t1 a
 WHERE vw_dtp_f486f43f.c1 = a.c1;

NO_PLACE_DISTINCT 힌트를 사용하면 쿼리 변환을 방지할 수 있다.
-- 4
SELECT /*+ NO_PLACE_DISTINCT */
       DISTINCT
       a.c2, b.c2
  FROM t1 a, t2 b
 WHERE b.c1 = a.c1;
 
------------------------------------
| Id  | Operation           | Name |
------------------------------------
|   0 | SELECT STATEMENT    |      |
|   1 |  HASH UNIQUE        |      |
|*  2 |   HASH JOIN         |      |
|   3 |    TABLE ACCESS FULL| T1   |
|   4 |    TABLE ACCESS FULL| T2   |
------------------------------------


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

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