
PUSH JOIN PREDICATE - 日本エクセム株式会社 Oracleパラメータ
基本情報
Parameter情報
説明
_PUSH_JOIN_PREDIATEパラメータはJoin PredicateをViewのテキストの中にPushする機能を決定します。Oracleは、Viewを使用するクエリに対して優先的にComplex View Mergingを試してみて、これが不可能なビューには、Join Predicate Pushingを試みます。
View Mergingが不可能なビュー(Nonmergeable View)は、次のような機能を使用するViewを意味します。
Oracleは常にJoin Predicate Pushingを試みますが、Viewの属性に基づいて不可能な場合もあることに注意しなければなりません。例えば、一般的にViewがUNION ALL句またはOUTER JOIN句を使用すると、Join Predicate Pushingが行われないのです。Join Predicate Pushingの動作はOracle Versionごとに異なるため、必ずVersionを確認べきです。
Oracle10gでは、Costに基づいてJoin Predicate Pushing機能を制御する機能が追加され、_OPTIMIZER_PUSH_PRED_COST_BASEDパラメータとして使用するかどうかを指定します。このパラメータの値はデフォルト値Trueです。もし9iバージョンでは、Join Predicate Pushingが動作してQueryの性能が良かったにも関わらず、10gへのアップグレード後、Join Predicate Pushingが動作しない場合は、パラメータの値をFalseに変更することにより、解決することができます。
注意
Join Predicate Pushingの適用例
Join Predicate Pushingの適用例は、以下の通りです。
誤ったJoin Predicate Pushingによるパフォーマンスの低下
Join Predicate Pushingは非常に望ましい機能であり、一般的に性能を改善させる効果があります。しかし、特定のクエリでは、特に複雑なクエリでは、むしろ誤った実行計画を作成し、逆効果を持っています。この場合には、Join Predicate Pushingを無効にすることで、問題を解決することができます。次のような方法で無効にすることができます。