[Mybatis plus] 关于批量操作的速度

OSC_小邋遢 发布于 2019/07/03 09:29
阅读 9K+
收藏 0

Linux基金会免费官方培训及考试申请即将截止,戳这里申请!>>>

当前是连接的 oracle 数据库,在默认配置下,查询 1000 条数据的速度达到 3 秒。在修改配置 fetch-size 之后查询时间缩短到 0.3 秒左右。

mybatis-plus:
  configuration:
    default-fetch-size: 512

然后发现在调用 saveOrUpdateBatch 方法的时候,使用默认 batchSize=1000,批量操作 1000 条数据的耗时 20 秒到 30 秒,这个时间有点不能容忍了。

 @Transactional(
     rollbackFor = {Exception.class}
 )
 default boolean saveOrUpdateBatch(Collection<T> entityList) {
     return this.saveOrUpdateBatch(entityList, 1000);
 }

希望大佬告知 saveOrUpdateBatch 方法如何提升操作速度。

加载中
0
tianxia007
tianxia007

同问! saveBatch()也是一样,很慢

maisel
maisel
回复 @tianxia007 : 嗯嗯,找到问题了,IdType值给的有问题,谢谢:grinning:
tianxia007
tianxia007
回复 @maisel : 批量插入,主键有重复的了吧?违反主键唯一协议。我猜的,你可以排查下这个问题
maisel
maisel
你好,我问一下我用mp操作Oracle数据库,使用saveBatch()批量插入的时候会报错:Caused by: java.sql.SQLException: 违反协议: [0];操作mysql数据库就可以正常批量插入,这个问题是不是我的Oracle版本的问题?
0
OSC_小邋遢
OSC_小邋遢

测试发现 saveBatch 20 条比 10 条明显快, 但 80 条的耗时差不多是20条的4倍,往后增加批处理的条数,耗时也线性增长。

所以怀疑是 save 的缓存区默认设置太小了

0
扶阿斗的人
扶阿斗的人

怎么没有大神给个解决办法啊,我的批量插入好慢,求解决啊

0
开源大龄码农
开源大龄码农

没感觉多慢额。。。300毫秒左右。

0
Kwum
Kwum

用<foreach>标签批量插入啊

0
十一五三
十一五三

我也遇到了 具体是怎么回事呢 一千多条数据 要20秒

OSC_小邋遢
OSC_小邋遢
如果时查询的话 设置一下 fetch-size 数据量亿级以下 就用给 spring batch 做
返回顶部
顶部