liian2018 2018-08-22 01:50 采纳率: 50%
浏览 3949
已采纳

Mybatis执行insert all 的时候 越来越慢是什么原因

情况描述:
数据库是Oracle
每次从表里取出10000条数据 进行计算 结果大概500~1000条 然后把这几百条数据批量插入数据库中 插入的表没有索引 就是很简单的几个字段
第一次执行 大概3S左右就插入成功了 第二次执行一下要50S左右 再往下越来越长。。不知道什么原因 有大佬遇到过吗
还有就是 当这个insert all变慢之后 对数据库进行 ddl操作都会卡死。。。而dml没有影响~
java这边数据库连接池用的druid

这是第一次
这是第二次
sql如下

 <insert id="batchInsertArriveInfo" parameterType="java.util.List" useGeneratedKeys="false">
    insert all
    <foreach collection="list" item="info" index="index">
      into
      T_ARRIVAL_STATION_INFORMATION
      (BUS_PATH_ID,STATION_SN,TASK_STATUS,ARR_TIME,BUS_PATH_NAME,RUN_FLAG,VEHICLE_ID,station_name,station_id)
      values
      (
      #{info.busPathId},#{info.stationSn},#{info.taskStatus},
      #{info.arrTime},#{info.busPathName},#{info.runFlag},
      #{info.vehicleId},#{info.stationName},#{info.stationId}
      )
    </foreach>
    select 1 from dual
  </insert>
  • 写回答

8条回答

  • zhangpan_soft 2018-08-22 09:02
    关注

    另外,你只插入一张表,为什么要把into 放在循环里面?这相当于,每执行一次插入都开启一个io,你有多少资源可以开启?改为

    
    <insert id="batchInsertArriveInfo" parameterType="java.util.List" useGeneratedKeys="false">
        insert all
    
          into
          T_ARRIVAL_STATION_INFORMATION
          (BUS_PATH_ID,STATION_SN,TASK_STATUS,ARR_TIME,BUS_PATH_NAME,RUN_FLAG,VEHICLE_ID,station_name,station_id)
          values
                <foreach collection="list" item="info" index="index" separator=",">
          (
          #{info.busPathId},#{info.stationSn},#{info.taskStatus},
          #{info.arrTime},#{info.busPathName},#{info.runFlag},
          #{info.vehicleId},#{info.stationName},#{info.stationId}
          )
        </foreach>
        select 1 from dual
      </insert>
    
    

    改为上述,只打开一个io,让其一次执行多条插入

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(7条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog