COMPLEX VIEW MERGING

目次

基本情報

 

パラメータ情報

 

Syntax   : _COMPLEX_VIEW_MERGING
設定方法  : ・Parameter File
           ・AALTER SYSTEM SET “_COMPLEX_VIEW_MERGING” = TRUE|FALSE
           ・ALTER SESSION SET “_COMPLEX_VIEW_MERGING” = TRUE|FALSE

 

バージョンとデフォルト
9iR2 : TRUE
10gR1: TRUE
10gR2: TRUE
11g  : TRUE

 

説明

 

Complex ViewとGROUP BYやDISTINCT構文を含む複雑なビューを意味します。Complex ViewはSimple Viewに比べMergeが困難です。Complex View Mergingとは、Complex ViewをQueryの本文中にMerge機能をいいます。_COMPLEX_VIEW_MERGINGパラメータを利用してComplex View Mergingを使用かどうかを決定します。

Oracle8iで初めてComplex View Merging機能が導入され、既定値はFalseでした。9iからデフォルト値がTrueとなっています。

 

注意

 

Complex View Mergingの適用例

 

Complex View Mergingの適用例は、以下の通りです。

- Complex View。GROUP BY句を使用し
CREATE VIEW avg_salary_view AS 
 SELECT department_id, AVG(salary) AS avg_sal_dept, 
   FROM employees 
   GROUP BY department_id;

- Complex Viewにアクセスするクエリ
SELECT departments.location_id, avg_sal_dept 
 FROM departments, avg_salary_view 
 WHERE departments.department_id = avg_salary_view.department_id 
   AND departments.location_id = 2400; 

- 上記のクエリは、以下のように変換され、Complex View Mergingが動作したことを確認することができます。
SELECT departments.loc, AVG(salary) 
 FROM departments, employees 
 WHERE departments.department_id = employees.department_id 
   AND departments.location_id = 2400 
 GROUP BY departments.rowid, departments.location_id; 

 

不適切Complex View Mergingによるパフォーマンスの低下

 

Complex View Mergingは非常に有効な機能であり、一般的に性能を改善させる効果があります。しかし、特定のクエリ(特に複雑なクエリ)では、むしろ誤った実行計画を作成し、逆効果になります。この場合には、Complex View Mergingを無効にすることで、問題を解決することができます。具体的には、次のような方法で無効にすることができます。

- _COMPLEX_VIEW_MERGINGパラメータをFalseに変更します。
ALTER SESSION SET"_COMPLEX_VIEW_MERGING"= FALSE;
SELECT* FROM complex_view v1 WHERE a= '100';

- NO_MERGEヒントを使用します。
SELECT/*+ NO_MERGE(v1)*/* FROM complex_view v1 WHERE a= '100';

 

関連情報

 

1.NO_MERGEヒント
2._OPTIMIZER_COST_BASED_TRANSFORMATIONパラメータ
3._PUSH_JOIN_PREDICATEパラメータ
4._SIMPLE_VIEW_MERGINGパラメータ

外部参照

 

1.http://www.psoug.org/reference/hints.html