2018.07.18
COMPLEX VIEW MERGING
目次
- 1. 基本情報
- 2. 注意
- 3. 関連情報
- 4. 外部参照
基本情報
パラメータ情報
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