ネストされた副問合せのネスト解除
副問合せは、親である文のWHERE
句内にあるときはネストされています。ネストされた副問合せを持つ文を評価する場合、Oracle Databaseは、副問合せ部分を複数回評価する必要があり、効果的なアクセス・パスまたは結合を見逃してしまう可能性があります。
副問合せのネスト解除によって、副問合せの本体がネスト解除され、その副問合せを含む文の本体に結合されます。これによって、アクセス・パスおよび結合の評価時に、オプティマイザが副問合せと文を1つのものと判断します。オプティマイザは、ほぼすべての副問合せをネスト解除できますが、いくつか例外があります。これらの例外としては、階層副問合せ、およびROWNUM
疑似列、集合演算子の1つ、ネストした集計ファンクション、副問合せの直接的な外部問合せブロックではない問合せブロックへの相関参照を含む副問合せなどがあります。
制約がない場合、オプティマイザは、次のネストされた副問合せを自動的にネスト解除します(ただし、ネスト解除しない場合もあります)。
-
相関関係のない
IN
副問合せ -
IN
およびEXISTS
相関副問合せ(集計ファンクションまたはGROUP
BY
句を含まない場合)
ネスト解除された拡張副問合せを行うには、次のタイプの副問合せをネスト解除するようにオプティマイザに指示します。
-
副問合せに
HASH_AJ
またはMERGE_AJ
ヒントを指定して、NOT
IN
副問合せをネスト解除します。 -
副問合せに
UNNEST
ヒントを指定して、その他の副問合せをネスト解除します。関連項目:
ヒントの詳細は、「ヒント」を参照してください。