mysql批量数据处理性能提升

        目前商户后台、管理后台项目中有很多批处理的功能,mysql提供了一个参数rewriteBatchedStatements,代码上使用bacth处理新增和更新,实际上mysql还是会拆分为多条入库,只是减少了一层循环调用, 实际性能并未提升很大,但是官方也有提供的批量难道只是迷惑人的吗? 实际上需要参数配置才可以实现高性能的批量插入的性能,减少了IO和DB开销,合并sql为一条,从而达到性能提升。

MySQL JDBC驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入,直接造成较低的性能。

如图:10条数据的批量更新,执行930ms


只需要在MySQL的JDBC连接的url中要加rewriteBatchedStatements参数,并保证5.1.13以上版本的驱动,就能实现高性能的批量插入。

如图:10条数据的批量更新组合成一条完整的SQL,执行430ms

10条数据插入性能提升1倍以上,此场景适用批量导入时数据大提升性能,也需要针对场景数据拼接SQL进行控制,尽量300条以内拆分,自行处理多个List执行Bacth

实践发现:rewriteBatchedStatements参数置为true, 驱动才会帮你批量执行SQL时才会有效提升性能

批量操作场景:INSERT/UPDATE/DELETE 都是有效的,但是要注意:必须是全部属性的SET,即使是不更新的字段也要有值,这里是源自空属性值不更新,导致SQL拼接无效会自动转为单条执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值