优化 JDBC 批量插入性能
将大量数据插入 MySQL 数据库需要高效的批处理才能确保最佳性能。虽然一次批量插入 100 万条记录似乎很合理,但有一些技术可以进一步优化此过程。
理解问题
提供的代码使用准备好的语句将值插入表中,但它不利用两个键properties:
优化连接
要启用这些优化,请在连接 URL 中设置这两个属性:
Connection c = DriverManager.getConnection("jdbc:mysql://host:3306/db?useServerPrepStmts=false&rewriteBatchedStatements=true", "username", "password");
修改后的代码
通过这些优化,更新后的代码变为:
try { // Disable auto-commit c.setAutoCommit(false); // Create a prepared statement String sql = "INSERT INTO mytable (xxx), VALUES(?)"; PreparedStatement pstmt = c.prepareStatement(sql); Object[] vals=set.toArray(); for (int i=0; i<vals.length; i++) { pstmt.setString(1, vals[i].toString()); pstmt.addBatch(); } // Execute the batch int [] updateCounts = pstmt.executeBatch(); System.out.append("inserted "+updateCounts.length); } catch (SQLException e) { e.printStackTrace(); }
结论
通过设置“useServerPrepStmts”和“rewriteBatchedStatements”属性,可以显着优化批量插入过程,减少所需的运行时间插入大量数据。
以上是如何优化 JDBC 批量插入以获得最大 MySQL 性能?的详细内容。更多信息请关注PHP中文网其他相关文章!