解决Delete数据删除慢的问题

目录

背景

处理方案

扩展


背景

今天在工作中遇见一个删除问题,捣鼓半天后,总算解决,对解决方式做了一下总结

具体情况:

        1.主表A(主键MainId)数据量5000左右,明细表B(主键SubId,外键MainId)数据量20万左右,

        2.由于业务原因,一次只插入一条A数据,N条B数据,每次插入都要先删除原有的记录,耗时4秒

        3.数据表操作频繁,不能整表删除或者拷贝到临时表等

处理方案

        1.B表创建MainId字段索引

        2.代码中先获取要删除的主表mianid,删除的条件原来使用in,改为用游标遍历删除,删除条件改为=,走了索引删除,处理一条由原来的4秒变为0.2秒,性能提升20倍

扩展

        1.若是删除全表数据,不要用delete,直接用Truncate处理(特别是千万甚至是亿级数据的表)

        2.若是只删除部分数据,如果删除量超过50%,则创建临时表,将保留的数据插入临时表,然后删除原表,再将临时表重命名,但是前提是再该表没有业务访问的时间段

        3.若是小部分删除,可以考虑用逻辑删除(添加一个del字段用于标识删除状态),然后再空闲时间段用定时器去删除del被标识的数据

        4.如果以上都无法满足,可以考虑我今天的这种方法

你可能感兴趣的:(数据库,delete,慢)