- ベストアンサー
Oracle9iR2のパフォーマンス向上のためにSQLを最適化する方法はありますか?
- Oracle9iR2のテーブルを結合するクエリーがパフォーマンスの問題を抱えています。分析関数や他の方法を使用して、パフォーマンスを向上させる方法を探しています。
- Oracle9iR2のテーブル結合を行う際に、パフォーマンスの低下が問題となっています。パフォーマンスを向上させるために、分析関数や他の手法を試していますが、良い解決策が見つかりません。
- Oracle9iR2のテーブル結合によるパフォーマンスの低下に悩んでいます。分析関数や他の方法を使用して、クエリーを最適化し、処理速度を向上させたいと考えています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
分析関数での実現例: 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も含めて、それぞれの実行計画を比較すると 面白いと思いますよ。
その他の回答 (2)
- 7colors
- ベストアンサー率25% (29/114)
このようなのではどうか? 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);
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
実行計画無しで、処理効率を追求することは不可能です。 SYS権限でないと実行計画がとれない訳ではないですが・・ 実行計画をとれないということであれば、トライ&エラーを 繰り返すしかないかと思いますよ。 (少ないとも、”こうすれば”絶対速くなるという王道はありませんので。) >どちらが一般的に早いんでしょうか? オプティマイザの判断次第です。 オプティマイザがどのような判断をしたのかが、実行計画で確認できます。
補足
ありがとうございます。 SQL見て、rankが利用できる事がわかりました。 ただ、rankを使用しても、fromに書かないとwhereできないんですね。 ところで、勉強不足ですみませんが、fromに副問合わせするのと、 同じテーブルをjoinするのとどちらが一般的に早いんでしょうか? #その為の実行計画って指摘を受けそうですが、PLAN_TABLEもSYS権限も #無いため、比較が出来ないでいます。 実際に走らせた比較ですと、どれも大きく速度差が見られない様子でしたので。 すみません、ご教授頂ければ幸いです。