• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:外部結合と等価結合のパフォーマンスの違いについて(ビューの場合))

外部結合と等価結合のパフォーマンスの違いについて(ビューの場合)

このQ&Aのポイント
  • Oracle10gでのSQL文における外部結合と等価結合のパフォーマンスの違いについて教えてください。
  • ビューの場合も同じような現象が起きることがありますが、外部結合ありのほうが結果がすぐに返されるのに対して、外部結合なしのほうは結果が返ってこないか時間がかかることがあります。
  • 重い処理が含まれるSELECT句やオプティマイザの実行計画などがパフォーマンスに影響している原因と考えられます。どちらのSQL文でパフォーマンスの問題が起きているのか詳しく説明してください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

オラクルのオプティマイザは、テーブルの検索の方法を決めますが、外部結合と内部結合で 立案される実行計画に違いがあり、内部結合の方が合理的な検索方法を立案しているので 結果的に、内部結合の方が速いという話なんですが・・ 実行計画を見なければ、判りませんが、 ・外部結合はbに対して全表検索を選択した。 ・内部結合では、bを索引検索を選択した。 ・bの検索量が、bの格納件数のうち、ごく一部なので、全表検索と索引検索では、極端に検索時間が違う。 ということなんだと思います。(推測なので、実は違うかも知れません) オラクルのマニュアルで、パフォーマンスチューニングガイドというマニュアルがあると思うので、 一読されることをお勧めします。 ちなみに、お書きになったSQLは何か変です。 内部結合のSQLは、bの項目を返さないので、実質的にbに存在するかのチェックを行っているに等しいものです。 書き方や流儀の問題で、内部結合が良いのか、exists条件が良いのか、in条件(メンバーシップ検査)が良いのか 変わってくると思いますが、一応理解できるものです。 しかし、外部結合のSQLについては、bを検索するけど、何もしない??理解に苦しむSQLになっています。 基本的に、内部結合より遅くなる外部結合を、わざわざ書いてみた、というように感じます。 (一般論ですが、同じ書き方をしたら、外部結合は内部結合と同等以下です)

OracleNew
質問者

お礼

ご回答ありがとうございます。 とても参考になりました。

OracleNew
質問者

補足

ご回答ありがとうございます。 >ちなみに、お書きになったSQLは何か変です。 >内部結合のSQLは、bの項目を返さないので、実質的にbに存在する>かのチェックを行っているに等しいものです。 このSQL文は簡略しすぎました、bのテーブルからも項目をSELECTしています、すみませんでした。。 その点を踏まえても同じようなご回答になっていましたでしょうか? また、ビューでもストアドプロシージャでも同じようなパフォーマンスになるのでしょうか?

関連するQ&A