2018.01.10
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