如何使用executeBatch提高性能?

Blu*_*bel 12 java jdbc

我正在编写用于在表中插入45000条记录的Java代码,我使用以下代码:

//create Db Connection
List<String> sqlInsertQueries = getListOfInsertsQueries();
for (String currentsql : sqlInsertQueries)
{
  stmt.addBatch(currentsql);
}
stmt.executeBatch();
conn.commit();
Run Code Online (Sandbox Code Playgroud)

此代码非常慢,完成需要将近5分钟.

有什么想法让它更快地运作?

sta*_*ker 16

您应确保自动提交为false,并使用预准备语句.准备好的语句可用于插入和更新.

connection con.setAutoCommit(false);  
PreparedStatement prepStmt = con.prepareStatement("INSERT INTO table (val1,val2) VALUES (?,?)");

for all values:
  prepStmt.setString(1,val1);
  prepStmt.setString(2,val2);
  prepStmt.addBatch();    

stmt.executeBatch(); 
conn.commit(); 
Run Code Online (Sandbox Code Playgroud)

  • 如果可以从业务点获得部分插入,我也会每1000个插入插入一次commit语句,因为写入日志可能会变得太大 (4认同)