我有一个清单的记录要插入到DB使用我的诱饵。以前,我的代码是这样的:
for(Item item : items){
sqlSession.insert("insert", item);
}使用这种方法是可行的,但我发现在Mysql服务器上存在着动态增量的Mysql,这是由于条目的数量。
由于我很少访问MySql配置,并且希望解决这个高磁盘io问题,我找到了一些可能的解决方案:
ExecutorType.BATCH实现sqlSessioninsert into Item values <foreach collection="list" item="item" index="index" separator=","> (#{item.a}, #{item.b}...) </foreach>有没有人知道哪一个适合解决我的高diskIO问题,这两种解决方案的主要区别是什么?谢谢。
发布于 2019-05-08 11:48:58
虽然很难预测服务器对磁盘I/O的影响,但推荐使用方法1(使用ExecutorType.BATCH)。
它基本上一次插入一定数量的项目。
由于在内部使用JDBC的批处理操作API (它是为处理许多行而设计的),您可以从驱动程序的优化中获益。
备注:
rewriteBatchedStatements=true添加到连接URL通常会显着地提高性能。方法2(多行插入)一次执行绑定所有项的单个语句。
可能会导致记忆问题。
https://stackoverflow.com/questions/56034380
复制相似问题