如何优化使用java插入数据的处理速度?

时间:2011-06-27 07:27:53

标签: java mysql

我需要读取带有标题和数据的Excel文件,并根据从文件中提取的标头和put值在数据库(MySQL)中创建一个表。为此,我使用JDBC在DB Table中创建和插入数据(使用的预处理语句)。

它工作得很好但是当记录数量增加时--suppose文件包含200000或更多记录 - 它会变慢。请指导我如何优化将数据插入数据库表的处理速度。

谢谢,Sameek

3 个答案:

答案 0 :(得分:6)

要优化它,首先应在所有插入中使用相同的PreparedStatement对象。

要进一步优化代码,您可以发送批量更新。

e.g。批次5:

//create table
PreparedStatement ps = conn.prepareStatement(sql);
for(int i =0; i < rows.length; ++i) {
  if(i != 0 && i%5 == 0) {
    pstmt.executeBatch();
  }
  pstmt.setString(1, rows[i].getName());
  pstmt.setLong(2, rows[i].getId());
  pstmt.addBatch();
}
pstmt.executeBatch();

答案 1 :(得分:1)

在事务中包装您的插入内容。伪代码:

1)开始交易 2)创建准备好的声明 3)为所有插入循环,设置准备好的语句参数并为每个插入执行 4)提交交易

答案 2 :(得分:0)

我将以hibernate为例。 Hibernate有一个名为HibernateSession的概念,它存储尚未发送给DB的SQL命令。 使用Hibernate,您可以每100次插入执行插入和刷新会话,这意味着每100个插入发送一次SQL查询。这有助于获得性能,因为它每100个插入而不是每个插入与数据库通信。

因此,您可以通过每100次(或任何您想要的)执行executeUpdate或使用preparedStatement来做同样的事情。