JDBC批量操作性能提升

JDBC

当使用INSERT INTO....VALUES()语句批量插入的时候,应该使用JDBC的PreparedStatement的批量操作方法,而不是采用一条一条执行的方法。

例如(来源:http://superjavason.iteye.com/blog/255423):

如上图,代码有3个关键的处理步骤:

1)关闭自动提交

2)addBatch

3)executeBatch

使用这种方法,SQLite测试时的效果提升非常明显,从 10000/s提升到100000/s(数据仅做参考,不能作为决策依据)

需要注意的是:这种方式只适合相同结构的SQL语句批量执行,对于不同结构的SQL语句不能用这种方式,因为PreparedStatement在初始化的时候要指定sql

 

MySQL

使用上述参数后,MySQL的性能也有一定的提升,但提升不明显。经过查找,确认和如下两个参数有关:

  • rewriteBatchedStatements=true

mysql默认关闭了batch处理, 通过此参数进行打开, 这个参数可以重写向 数据库提交的SQL语句

  • useServerPrepStmts=false

如果不开启(useServerPrepStmts=false), 使用com.mysql.jdbc.PreparedStatement进行本地SQL拼装, 最后送到db上就是已经替换了?后的最终SQL

 

经过测试,打开这2个参数后,mysql的批处理性能从1000多提升到50000多

详细请参考:http://blog.csdn.net/whucyl/article/details/20838079

mybatisplus 批量操作的性能优化可以从以下几个方面入手: 1. 使用 BatchExecutor 执行批量操作:mybatisplus 提供了 BatchExecutor 来执行批量操作,它会将多个 SQL 语句一起发送到数据库,减少了与数据库的交互次数,提升性能。可以通过在配置文件中设置 `batch` 属性为 `true` 来开启 BatchExecutor。 2. 使用批量插入、更新和删除方法:mybatisplus 提供了相应的方法用于批量插入、更新和删除数据,例如 `insertBatchSomeColumn`、`updateBatchById` 和 `deleteBatchIds` 等。这些方法会将多条数据一次性发送到数据库,减少了 SQL 语句的解析和执行时间。 3. 使用 JDBC批量操作功能:在使用 mybatisplus 进行批量操作时,也可以直接使用 JDBC批量操作功能,即使用 `PreparedStatement` 的 `addBatch` 和 `executeBatch` 方法。这样可以利用数据库的批量处理能力,提升性能。但要注意的是,使用 JDBC批量操作功能时,需要手动管理事务。 4. 调整 JDBC 驱动的参数:JDBC 驱动的参数设置也会影响到批量操作的性能。可以根据实际情况调整参数,如 `rewriteBatchedStatements`、`useServerPrepStmts` 和 `cachePrepStmts` 等参数,以获得更好的性能。 需要注意的是,批量操作的性能优化也受到数据库本身性能的影响,如硬件设备、数据库配置等因素。所以在进行性能优化时,也要考虑到数据库的相关配置和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值