• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:1SQLで書けないものでしょうか)

Oracle9iR2のパフォーマンス向上のためにSQLを最適化する方法はありますか?

このQ&Aのポイント
  • Oracle9iR2のテーブルを結合するクエリーがパフォーマンスの問題を抱えています。分析関数や他の方法を使用して、パフォーマンスを向上させる方法を探しています。
  • Oracle9iR2のテーブル結合を行う際に、パフォーマンスの低下が問題となっています。パフォーマンスを向上させるために、分析関数や他の手法を試していますが、良い解決策が見つかりません。
  • Oracle9iR2のテーブル結合によるパフォーマンスの低下に悩んでいます。分析関数や他の方法を使用して、クエリーを最適化し、処理速度を向上させたいと考えています。

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

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

分析関数での実現例: select key_data,rireki,read_data from (select x.*,rank() over(partition by key_data order by rireki desc) R from test) where R=1; 分析関数を使わない実現例: select * from test where (key_data,rireki) in (select key_data,max(rireki) from test group by key_data); あなたのSQLも含めて、それぞれの実行計画を比較すると 面白いと思いますよ。

ponta3rd
質問者

補足

ありがとうございます。 SQL見て、rankが利用できる事がわかりました。 ただ、rankを使用しても、fromに書かないとwhereできないんですね。 ところで、勉強不足ですみませんが、fromに副問合わせするのと、 同じテーブルをjoinするのとどちらが一般的に早いんでしょうか? #その為の実行計画って指摘を受けそうですが、PLAN_TABLEもSYS権限も #無いため、比較が出来ないでいます。 実際に走らせた比較ですと、どれも大きく速度差が見られない様子でしたので。 すみません、ご教授頂ければ幸いです。

その他の回答 (2)

  • 7colors
  • ベストアンサー率25% (29/114)
回答No.3

このようなのではどうか? SELECT A.KEY_DATA, A.RIREKI, A.READ_DATA FROM TEST A WHERE A.RIREKI = ( SELECT MAX(B.RIREKI) FROM TEST B WHERE B.KEY_DATA = A.KEY_DATA);

回答No.2

実行計画無しで、処理効率を追求することは不可能です。 SYS権限でないと実行計画がとれない訳ではないですが・・ 実行計画をとれないということであれば、トライ&エラーを 繰り返すしかないかと思いますよ。 (少ないとも、”こうすれば”絶対速くなるという王道はありませんので。) >どちらが一般的に早いんでしょうか? オプティマイザの判断次第です。 オプティマイザがどのような判断をしたのかが、実行計画で確認できます。

関連するQ&A