为什么Spring的jdbcTemplate.batchUpdate()这么慢?
2022-09-01 06:24:48
我试图找到更快的方法来进行批量插入。
我试图用jdbcTemplate.update(String sql)插入几个批处理,其中sql是由StringBuilder构建的,看起来像这样:
INSERT INTO TABLE(x, y, i) VALUES(1,2,3), (1,2,3), ... , (1,2,3)
批大小正好是 1000。我插入了近100批。我使用秒表检查了时间,发现了插入时间:
min[38ms], avg[50ms], max[190ms] per batch
我很高兴,但我想让我的代码更好。
在那之后,我尝试使用jdbcTemplate.batchUpdate,如下所示:
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
// ...
}
@Override
public int getBatchSize() {
return 1000;
}
});
sql 看起来像
INSERT INTO TABLE(x, y, i) VALUES(1,2,3);
我很失望!jdbcTemplate 以分离的方式批量执行 1000 行的每个插入。我盯着mysql_log,发现那里有一千个插入物。我使用秒表检查了时间,发现了插入时间:
最小[900毫秒],平均[1100毫秒],最大[2000毫秒]每批次
那么,任何人都可以向我解释一下,为什么jdbcTemplate在这种方法中做分离的插入?为什么方法的名称是 batchUpdate?或者可能是我以错误的方式使用此方法?