VW_TE 인터널 뷰를 살펴보자.
테스트를 위해 아래와 같이 테이블을 생성하자. t1_x1 인덱스의 p1 파티션은 USABLE, p2, p3 파티션은 UNUSABLE 상태다.
-- 1 DROP TABLE t1 PURGE; CREATE TABLE t1 (c1 NUMBER, c2 NUMBER) PARTITION BY RANGE (c1) ( PARTITION p1 VALUES LESS THAN (2) , PARTITION p2 VALUES LESS THAN (3) , PARTITION p3 VALUES LESS THAN (MAXVALUE)); CREATE INDEX t1_x1 ON t1 (c2) LOCAL UNUSABLE; ALTER INDEX t1_x1 REBUILD PARTITION p1;
아래 쿼리의 실행 계획에서 VW_TE 인터널 뷰를 확인할 수 있다. EXPAND_TABLE 힌트에서 TE가 Table Expand의 약어임을 유추할 수 있다. 해당 쿼리 변환은 11.2 버전에 추가된 것으로 보인다.
-- 2 ALTER SESSION SET "_optimizer_table_expansion" = true; SELECT /*+ INDEX(T1) EXPAND_TABLE(T1) */ * FROM t1 WHERE c2 = 1; -------------------------------------------------------------------------------- | Id | Operation | Name | Pstart| Pstop | -------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | 1 | VIEW | VW_TE_1 | | | | 2 | UNION-ALL | | | | | 3 | PARTITION RANGE SINGLE | | 1 | 1 | | 4 | TABLE ACCESS BY LOCAL INDEX ROWID BATCHED| T1 | 1 | 1 | |* 5 | INDEX RANGE SCAN | T1_X1 | 1 | 1 | | 6 | PARTITION RANGE OR | |KEY(OR)|KEY(OR)| |* 7 | TABLE ACCESS BY LOCAL INDEX ROWID BATCHED| T1 |KEY(OR)|KEY(OR)| |* 8 | INDEX RANGE SCAN | T1_X1 |KEY(OR)|KEY(OR)| --------------------------------------------------------------------------------
QT는 위 쿼리를 아래 쿼리로 변환한다. 인덱스를 사용할 수 있는 p1 파티션은 인덱스로 액세스하고, 인덱스를 사용할 수 없는 p2, p3 파티션은 파티션을 전체 스캔한다.
-- 3 SELECT vw_te_1.c1 , vw_te_1.c2 FROM ((SELECT c1, c2 FROM scott.t1 t1 WHERE c2 = 1 AND c1 < 2) UNION ALL (SELECT c1, c2 FROM t1 WHERE c2 = 1 AND ( c1 >= 2 OR c1 IS NULL))) vw_te_1;
아래와 같이 NO_EXPAND_TABLE 힌트를 사용하면 전체 파티션을 풀스캔한다.
-- 4 SELECT /*+ INDEX(T1) NO_EXPAND_TABLE(T1) */ * FROM t1 WHERE c2 = 1; -------------------------------------------------------------------- | Id | Operation | Name | Pstart| Pstop | -------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | | 1 | PARTITION RANGE ALL | | 1 | 3 | | 2 | TABLE ACCESS BY LOCAL INDEX ROWID| T1 | 1 | 3 | |* 3 | INDEX RANGE SCAN | T1_X1 | 1 | 3 | --------------------------------------------------------------------
'Oracle > Internal View' 카테고리의 다른 글
VM_NWVW 인터널 뷰 (0) | 2018.03.02 |
---|---|
VW_WIF 인터널 뷰 (0) | 2018.03.02 |
VW_SSQ 인터널 뷰 (0) | 2018.03.02 |
VW_SQ 인터널 뷰 (0) | 2018.03.02 |
VW_ORE 인터널 뷰 (0) | 2018.03.02 |