私はリファクタリングを実行するために取り組んでいるという幾分面倒なクエリを継承しました。どのようにしてインラインビューをプッシュすると、クエリが遅くなる可能性がありますか?
私が個人的な好みのためにしたことの1つは、ANSI-99のすべての結合構文を「内部結合」および「左外部結合」文から問合せの述語に変更することでした。私は非常に奇妙なものが2つあることに気付きました。
- 「INNER JOIN ...」構文からの結合を変更すると、EXPLAIN PLANプランが変更されました。 ANSI 99の構文では、oracleは結合されていた列の全表スキャンを実行しました。結合構文を変更すると、述語プッシュが行われます。なぜ、結合構文がExplainプランを変更するのですか?
- インラインビューをプッシュする述部によって、実際にはクエリが大幅に遅くなりました。約3秒で(結合を変更する前に)実行されていたクエリ。今は9秒かかります。正直言って、私は計画を説明することについてかなり新しいので、クエリの再構成が別の理由でそれを遅らせる可能性は全くあります。しかし、最終的に私の質問は次のようになります。「述語が索引付き列を押してクエリを大幅に遅くすることは可能ですか?そうなら、なぜですか?
回答してくれてありがとう、と私の謝罪これは非常に明確でない場合は...
変更前のクエリと変更後のクエリを投稿してください。クエリの意味が変更された場合(またはオプティマイザが利用できる情報を追加/削除する場合)かなりの計画。 –