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

如何优化使用java插入数据的处理速度?,java,mysql,Java,Mysql,我需要读取一个Excel文件及其标题和数据,并根据从文件中提取的标题和put值在数据库MySQL中创建一个表。为此,我使用JDBC在DB表中创建和插入准备好的语句中使用的数据 它工作得很好,但当记录数增加时(假设文件包含200000条或更多记录),速度会变慢。请指导我如何优化将数据插入DB表的处理速度 谢谢,Sameek要优化它,首先应该在所有插入中使用相同的PreparedStatement对象 要进一步优化代码,可以发送批量更新 e、 g.5批: //create table Prepare

我需要读取一个Excel文件及其标题和数据,并根据从文件中提取的标题和put值在数据库MySQL中创建一个表。为此,我使用JDBC在DB表中创建和插入准备好的语句中使用的数据

它工作得很好,但当记录数增加时(假设文件包含200000条或更多记录),速度会变慢。请指导我如何优化将数据插入DB表的处理速度


谢谢,Sameek要优化它,首先应该在所有插入中使用相同的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开始交易 2创建准备好的语句 3所有插入的循环,设置准备好的语句参数并执行每个插入
4提交事务

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


因此,您可以通过每100次执行一次executeUpdate,或者根据需要执行多次,或者使用preparedStatement来实现同样的功能

更改为Oracle DB,带有大型机。。。我想,一个excel表不能容纳超过65535条记录rows@Andreas_D:的确如此。我猜他在为每个Excel行插入多行或其他内容。。。或者他在使用多张表来重复使用准备好的语句和批处理,这两个语句和批处理是最重要的,我认为您可以设置插入的约束条件,然后在所有记录就位时激活它们。这应该比为您添加的每个记录检查约束更快。但我不知道如何在MySQL中实现,也不知道是否可以在事务中实现,或者在设置开/关检查之前必须提交。+1-我了解到人们有时会忘记,我们准备了一个语句来反复使用它。当然,这里可能不是这样