2

これは私のコードがどのように見えるかです。クエリは 1 分未満で実行されますが、while ループが完了するまでに 2 時間以上かかります。私は約800,000件のレコードを持っています。reportModelList に保存する最良の方法を教えてください。必要に応じて休止状態に切り替えることもできます。

PreparedStatement ps =connection.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
try{
while (rs.next()) {
ReportModel t = new ReportModel();
t.set1(rs.getDate(1));
t.set2(rs.getDouble(2));
...
...
t.set60(rs.getString(60));
reportModelList.add(t)

}}finally {
DbUtils.closeQuietly(rs);
}
4

2 に答える 2

3

3つの提案。

  1. @Luiggi Mendoza がコメントとして書いているように、大きな初期バッファーでリストを初期化して、一日中再割り当てやコピーを行わないようにします。
  2. DB および JDBC ドライバーによっては、ps.setFetchSize(50000);(定数で遊んでみてください) で高速化される場合があります。
  3. どのステップがボトルネックであるかを推測しないでください。プロファイラーを使用します。
于 2013-10-11T23:17:30.873 に答える