L
o
a
d
i
n
g
.
.
.

ホーム

お知らせ

製品・ソリューション

サービス

導入事例・パートナー

EXEM Academy・ブログ

会社情報

採用情報

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 
    

PHP Code Snippets Powered By : XYZScripts.com