项目用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分钟了
可以的话字段加个是否删除的标记,然后定时任务批量删除