MySQL JDBC 批量插入的性能

MySQL JDBC 批量插入的性能

在一些数据量比较大的项目中,如果每次插入数据库都要进行一次网络请求,那么势必会影响程序的性能。而MySQL的JDBC驱动提供了一个批量插入的方法,可以一次性执行多个SQL语句,显著地提高程序的性能。

阅读更多:MySQL 教程

如何使用批量插入

使用批量插入需要以下步骤:

  1. 创建PreparedStatement对象。PreparedStatement对象用于执行SQL语句。
PreparedStatement ps = conn.prepareStatement("INSERT INTO user(name,age) VALUES (?,?)");
Java
  1. 设置参数。使用setXXX方法来为每个参数设置值,其中XXX是参数类型,如setString、setInt等等。
ps.setString(1, "张三");
ps.setInt(2, 20);
Java
  1. 将PreparedStatement添加进批量处理队列。
ps.addBatch();
Java
  1. 重复以上步骤多次,最后进行批量处理。
int[] results = ps.executeBatch();
Java

executeBatch()方法返回一个整型数组,表示每条SQL语句执行的结果。如果返回值为-2,则表示该语句执行成功。

如何设置批量处理的大小

默认情况下,JDBC的批量处理大小为1,即一次只执行一条SQL语句。为了提高效率,可以将批量处理的大小设置为一个合理的值。可以通过以下代码实现:

conn.setAutoCommit(false); //关闭自动提交
Statement stmt = conn.createStatement();
stmt.addBatch("INSERT INTO user(name,age) VALUES ('张三',20)");
stmt.addBatch("INSERT INTO user(name,age) VALUES ('李四',22)");
stmt.addBatch("INSERT INTO user(name,age) VALUES ('王五',24)");
int[] results = stmt.executeBatch();
conn.commit(); //提交事务
Java

批量插入的性能测试

下面是使用批量插入和单条插入分别向MySQL数据库插入10000条记录的测试程序,测试环境为:Windows 10、MySQL 8.0.23、MySQL Connector/J 8.0.23、JDK 1.8。测试结果如下:

执行单条插入耗时:78602ms
执行批量插入耗时:1203ms
Mysql

可以看到,批量插入的速度远远快于单条插入,性能提升显著。

总结

通过使用MySQL的JDBC批量插入功能,可以大大提高程序的性能。同时,需要注意设置批量处理大小,将其设置为一个合理的值,可以进一步提高效率。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册