catch-img

UNNEST SUBQUERY - 日本エクセム株式会社 Oracleパラメータ


目次[非表示]

  1. 1.基本情報
    1. 1.1.パラメータ情報
    2. 1.2.Appendix of Redo Layer
  2. 2.注意
    1. 2.1.Subquery Unnestingの適用例
    2. 2.2.誤ったSubquery Unnestingによるパフォーマンスの低下
  3. 3.関連情報
  4. 4.外部参照

基本情報

パラメータ情報

1) Syntax : _UNNEST_SUBQUERY

2) 設定方法
   Parameter File
   ALTER SYSTEM SET"_UNNEST_SUBQUERY"= TRUE| FALSE

   ALTER SESSION SET"_UNNEST_SUBQUERY"= TRUE| FALSE


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


Appendix of Redo Layer

 _UNNEST_SUBQUERYパラメータは、Subquery Unnestingかどうかを決定します。Subquery Unnestingとは、文字通りSubqueryをUnnest、すなわちクエリを解放することを意味します。


注意

Subquery Unnestingの適用例

 Subquery Unnestingの適用例は、以下の通りです。

- Subqueryを使用するクエリ
SELECT*
 FROM orders
 WHERE customer_id IN
   (SELECT customer_id FROM customers);
 
- Subquery Unnestingによって変換されたクエリ。Subqueryがクエリ本文解放されたことを知ることができます。
 SELECT orders*
 FROM orders、customers
 WHERE orders.customer_id= customers.customer_id;


誤ったSubquery Unnestingによるパフォーマンスの低下

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

- _UNNEST_SUBQUERYパラメータをFalseに変更
ALTER SESSION SET"_UNNEST_SUBQUERY"= FALSE;
SELECT* FROM(SELECT... FROM b)x WHERE a= '100';

- NO_UNNESTヒントを使用
SELECT* FROM(SELECT/*+ NO_UNNEST*/ FROM b)x WHERE a= '100';


関連情報

1. NO_UNNESTヒント
2. _COMPLEX_VIEW_MERGINGパラメータ
3. _OPTIMIZER_COST_BASED_TRANSFORMATIONパラメータ
4. _PUSH_JOIN_PREDICATEパラメータ


外部参照

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


CONTACT

他社に頼らず自社でデータベースを監視・運用をしませんか?
MaxGaugeがサポートします

お役立ち資料は
こちらから

不明点がある方は、
こちらからお問い合わせください

お電話でのお問い合わせはこちら

平日 10時~18時

人気記事ランキング

タグ一覧