在生产环境, 使用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让它生效, 否则批量更新会退化成每条记录更新执行.