mybatis的foreach对包含复合唯一索引的表做批量删除,应该如何提升速度?

新手上路,请多包涵

项目用SpringBoot框架,持久层用mybatis,数据库为mysql,业务表包含四个字段复合的唯一索引,在这张表上进行批量插入或者删除,要求不使用逻辑删除,在批量删除的数据达到10万级别时,用foreach实现批量删除速度会因为索引影响变得很慢,应该如何优化?mapper里面的实现方式如下:

<delete id="delete">
    delete from table
    where (a, b, c, d) in
    <foreach collection="list"  item="item" index="index" open="(" separator="," close=")">
        (#{item.a},#{item.b},#{item.c},#{item.d})
    </foreach>
</delete>

哪怕分成小批次,删除10w数据(a,b,c,d上加复合唯一索引)也要超过1分钟了

阅读 3.6k
2 个回答

可以的话字段加个是否删除的标记,然后定时任务批量删除

感觉优化空间应该不大了,如果是因为sql太慢影响用户体验了,可以考虑把这块操作改成异步操作

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题