我需要读取带有标题和数据的Excel文件,并根据从文件中提取的标头和put值在数据库(MySQL)中创建一个表。为此,我使用JDBC在DB Table中创建和插入数据(使用的预处理语句)。
它工作得很好但是当记录数量增加时--suppose文件包含200000或更多记录 - 它会变慢。请指导我如何优化将数据插入数据库表的处理速度。
谢谢,Sameek
答案 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来做同样的事情。