Oracle/Internal View2018. 3. 2. 11:11

VW_ORE 인터널 뷰를 살펴보자.


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

-- 1
DROP TABLE t1 PURGE;
CREATE TABLE t1 (c1 NUMBER, c2 NUMBER);
CREATE INDEX t1_x1 ON t1 (C1);


아래 쿼리의 실행 계획에서 VW_ORE 인터널 뷰를 확인할 수 있다. PLACE_DISTINCT 힌트에서 ORE가 OR Expand의 약어임을 유추할 수 있다. 12.2 버전부터 CONCATENATION 오퍼레이션이 해당 오퍼레이션으로 대체된 것 같다.

-- 2
VARIABLE v1 NUMBER;

SELECT *
  FROM t1
 WHERE c1 = NVL (:v1, c1);

------------------------------------------------------------------
| Id  | Operation                              | Name            |
------------------------------------------------------------------
|   0 | SELECT STATEMENT                       |                 |
|   1 |  VIEW                                  | VW_ORE_BA8ECEFB |
|   2 |   UNION-ALL                            |                 |
|*  3 |    FILTER                              |                 |
|   4 |     TABLE ACCESS BY INDEX ROWID BATCHED| T1              |
|*  5 |      INDEX RANGE SCAN                  | T1_X1           |
|*  6 |    FILTER                              |                 |
|*  7 |     TABLE ACCESS FULL                  | T1              |
------------------------------------------------------------------

Outline Data
-------------
      OR_EXPAND(@"SEL$1" (1) (2))


QT는 위 쿼리를 아래 쿼리로 변환한다. UNION ALL 연산자를 사용하여 조건에 따라 실행 계획을 최적화하는 것이다.

-- 3
SELECT vw_ore_ba8ecefb.c1, vw_ore_ba8ecefb.c2
  FROM ((SELECT c1, c2
           FROM t1
          WHERE :b1 IS NOT NULL
            AND c1 = :b2)
        UNION ALL
        (SELECT c1, c2
           FROM scott.t1 t1
          WHERE :b3 IS NULL
            AND c1 IS NOT NULL)) vw_ore_ba8ecefb;


NO_OR_EXPAND 힌트를 사용하면 쿼리 변환을 방지할 수 있다.

-- 4
SELECT /*+ NO_OR_EXPAND */
       *
  FROM t1
 WHERE c1 = NVL (:v1, c1);

----------------------------------
| Id  | Operation         | Name |
----------------------------------
|   0 | SELECT STATEMENT  |      |
|*  1 |  TABLE ACCESS FULL| T1   |
----------------------------------



[관련 링크]

Optimizer Transformations: OR Expansion (by Nigel Bayliss)

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

VW_SSQ 인터널 뷰  (0) 2018.03.02
VW_SQ 인터널 뷰  (0) 2018.03.02
VW_NSO 인터널 뷰  (0) 2018.03.02
VW_LAT 인터널 뷰  (0) 2018.03.02
VW_JF 인터널 뷰  (0) 2018.03.02
Posted by 정희락_