- PR -

SQL実行速度について

投稿者投稿内容
fujie
会議室デビュー日: 2005/04/13
投稿数: 15
投稿日時: 2006-08-25 19:57
いつもお世話になっております。

全く同じSQLを、SQL+で実行した場合、一瞬で結果が返るSQLが、
下記のようにJavaから実行すると、かなり時間がかかってしまいます。(1分程度)

何かここがおかしいのでは?という事がありましたら、教えてください。

------------------------------------------------------------------
■環境
J2SDK 1_4_2_06
Oracle 9.0.1.0.1
Tomcat4.1.24
------------------------------------------------------------------
public AAAForm getData(AAAForm fm,
int page) throws Exception{

Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
int para = 1;

ArrayList result = new ArrayList();

try {

conn = getConnection();

ps = conn.prepareStatement(SQL);
ps.setString(para++, A);
ps.setString(para++, B);
ps.setString(para++, C);
… // パラメータが全部で12個あります。
rs = ps.executeQuery(); // ←大変時間がかかります。

while(rs.next()){



}

}catch(Exception e) {
throw new Exception(e);
}finally {
if(rs != null){ try { rs.close(); } catch (SQLException e){ e.printStackTrace(); }}
if(ps != null){ try { ps.close(); } catch (SQLException e){ e.printStackTrace(); }}
if(conn != null){ try { conn.close(); } catch (SQLException e){ e.printStackTrace(); }}
}

}
------------------------------------------------------------------

どうぞご教授をお願いいたします。
小僧
ぬし
会議室デビュー日: 2002/08/14
投稿数: 526
投稿日時: 2006-08-25 23:44
どんなSQLを実行しても変わらないんですかね?
更新系のSQLだと遅いとか。
fujie
会議室デビュー日: 2005/04/13
投稿数: 15
投稿日時: 2006-08-28 09:13
お返事をいただき、ありがとうございます。

今回問題となっているSQLは、SELECT文です。

もし、お心当たりがありましたら、
ご教授をお願い致します。
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-08-28 09:16
わかんねーかな?
試せって言ってるんだよ。
引用:

小僧さんの書き込み (2006-08-25 23:44) より:
どんなSQLを実行しても変わらないんですかね?
更新系のSQLだと遅いとか。

nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2006-08-28 10:36
ぶさいくろうさんは言いにくいことをずばっと言ってくれて素敵。

さて。本当に「全く同じSQL」なんでしょうか?
Oracleだったら実行計画を確認するなどしてみてください。
SELECTでパフォーマンスに違いが出るとなれば
インデックス絡みとかがよくあるパターンですね。

どんなSQLを流しているのかも情報ないわけですし、
実際にそちらで手を動かしてみないことには解決しないでしょう。
刑事は足でSEは手でしょうかね
あすか
ぬし
会議室デビュー日: 2006/07/12
投稿数: 309
投稿日時: 2006-08-28 10:59
既に言われているように
いろいろなSQL文を試して見て
真実に同じSQL文なのに
Java-Oracleの通信を行うと問題があるのでしたら
間にあるものがおかしいのではないでしょうか?

それと
同じSQL文を試す際にはバインドするを止めるべきかと。
ご提示されているJavaのソースを見る限り
同じSQL文を試しているとは思えないのです。
fujie
会議室デビュー日: 2005/04/13
投稿数: 15
投稿日時: 2006-08-28 15:40
たくさんのお返事を頂き、ありがとうございました。

色々なSQLの実行(参照系、更新系)、
実行計画の取得、
インデックスの検討、
バインド変数の検討(有り/無しなど)、
Statementの検討 

等につきましては、試行済みですが、改善されませんでした。

ご指摘にもありますように、
こちらでもう少し様々な問題を考えて試行錯誤してみます。
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2006-08-28 15:58
msoです。

引用:

fujieさんの書き込み (2006-08-28 15:40) より:
たくさんのお返事を頂き、ありがとうございました。

色々なSQLの実行(参照系、更新系)、
実行計画の取得、
インデックスの検討、
バインド変数の検討(有り/無しなど)、
Statementの検討 

等につきましては、試行済みですが、改善されませんでした。

ご指摘にもありますように、
こちらでもう少し様々な問題を考えて試行錯誤してみます。



そこまでやっているのであればどのような結果が返ってきたのか、
提示してください。
このSQLを実行したときは、こういう結果が返ってきたという感じです。
今のままでは誰にも解決できませんよ。

スキルアップ/キャリアアップ(JOB@IT)