기술 정보
home
채널 소개
home

힌트 활용한 뷰 실행 계획 제어

문서 유형
기술 정보
분야
튜닝
키워드
hint
적용 제품 버전
6FS05
6FS06
6FS07
6FS07PS
7FS01
7FS02
7FS02PS

개요

뷰를 호출하는 쿼리에서는 뷰 내에서 alias가 지정된 테이블에 대해 힌트(hint) 를 사용할 수 있습니다. (글로벌 힌트)
힌트를 활용해 뷰의 실행계획을 제어하는 방법을 안내합니다.

방법

힌트 작성 예시

leading([뷰 alias].[뷰 내에 테이블 alias])
index([뷰 alias].[뷰 내에 테이블 alias] [인덱스명]) */

힌트 사용 예시

1.  테스트 오브젝트 생성

create table tb1(c1 number, c2 number, c3 number); create unique index tb1_pk on tb1(c1); alter table tb1 add constraint tb1_pk primary key(c1); create table tb2(c1 number, c2 number, c3 number); create unique index tb2_pk on tb2(c1); alter table tb2 add constraint tb2_pk primary key(c1); create index tb_idx1 on tb1(c1, c2); create view v_test as select t1.c1 t1c1, t1.c2 t1c2, t2.c1 t2c1, t2.c2 t2c2 from tb1 t1, tb2 t2 where t1.c1 = t2.c1;
SQL
복사
원본 SQL 실행 계획
SELECT * FROM V_TEST VT WHERE VT.T1C1 = 1; Eecution Plan ------------------------------------------------------------------ 1 NESTED LOOPS (Cost:5, %%CPU:0, Rows:1) 2 TABLE ACCESS (ROWID): TB2 (Cost:3, %%CPU:0, Rows:1) 3 INDEX (UNIQUE SCAN): TB2_PK (Cost:2, %%CPU:0, Rows:1) 4 INDEX (RANGE SCAN): TB_IDX1 (Cost:2, %%CPU:0, Rows:1) Predicate Information -------------------------------------------------------------------------------- 1 - access: ("T1"."C1" = "T2"."C1") (1.000) 3 - access: ("T1"."C1" = 1) (0.010) 4 - access: ("T1"."C1" = 1) (0.010)
SQL
복사

2.  힌트 적용

(1) leading 힌트
뷰 내에서 T1 alias 테이블이 먼저 수행되도록 실행 계획이 변경됩니다.
SELECT /*+ leading(VT.T1) */ * FROM V_TEST VT WHERE VT.T1C1 = 1; Execution Plan -------------------------------------------------------------------------------- 1 NESTED LOOPS (Cost:5, %%CPU:0, Rows:1) 2 INDEX (RANGE SCAN): TB_IDX1 (Cost:2, %%CPU:0, Rows:1) 3 TABLE ACCESS (ROWID): TB2 (Cost:3, %%CPU:0, Rows:1) 4 INDEX (UNIQUE SCAN): TB2_PK (Cost:2, %%CPU:0, Rows:1) Predicate Information -------------------------------------------------------------------------------- 1 - access: ("T1"."C1" = "T2"."C1") (1.000) 2 - access: ("T1"."C1" = 1) (0.010) 4 - access: ("T1"."C1" = 1) (0.010)
SQL
복사
(2) Index 힌트
뷰 내에서 T1 alias 테이블이 TB1_PK 인덱스를 사용하도록 실행 계획이 변경됩니다.
SELECT /*+ index(VT.T1 TB1_PK) */ * FROM V_TEST VT WHERE VT.T1C1 = 1; Execution Plan -------------------------------------------------------------------------------- 1 NESTED LOOPS (Cost:6, %%CPU:0, Rows:1) 2 TABLE ACCESS (ROWID): TB2 (Cost:3, %%CPU:0, Rows:1) 3 INDEX (UNIQUE SCAN): TB2_PK (Cost:2, %%CPU:0, Rows:1) 4 TABLE ACCESS (ROWID): TB1 (Cost:3, %%CPU:0, Rows:1) 5 INDEX (UNIQUE SCAN): TB1_PK (Cost:2, %%CPU:0, Rows:1) Predicate Information -------------------------------------------------------------------------------- 1 - access: ("T1"."C1" = "T2"."C1") (1.000) 3 - access: ("T1"."C1" = 1) (0.010) 5 - access: ("T1"."C1" = 1) (0.010)
SQL
복사
주의
뷰 작성 시, 뷰 내에 동일한 alias를 지정하지 않습니다.