UNNEST SUBQUERY

基本情報

 

Parameter情報

 

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