JdbcTemplate批量更新慢的问题

在生产环境中,使用springjdbcTemplate的batchUpdate进行100万条数据的批量更新时,发现更新速度极慢,单线程处理100w条数据耗时近1小时。问题在于批量更新并未真正批量执行,而是退化成了循环执行。通过添加rewriteBatchedStatements=true到JDBCURL,启用MySQL驱动的批量语句重写功能,可以避免这种退化,从而提高更新性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在生产环境, 使用spring jdbcTemplate.batchUpdate 进行百万级批量更新时,批量大小为1000条, 单线程更新,100w条数据更新持续了将近1个小时,每次更新耗时在4~5秒之间。这更新性能实在忍无可忍, 但是更新走的主键索引, 按理来说不应该如此慢. 后来发现并没有真正批量执行,退化成循环执行了。

我用的是:mysql-connector-java-5.1.49.jar驱动

添加rewriteBatchedStatements参数

例:jdbc:mysql://localhost/db_question?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true&useSSL=false&&rewriteBatchedStatements=true

设置此参数为true, 会让数据库driver重写批量更新语句(批量插入和批量更新).

MySQL会从连接中获取rewriteBatchedStatements参数, 可通过在jdbc url中配置rewriteBatchedStatements=true让它生效, 否则批量更新会退化成每条记录更新执行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值