解决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.如果以上都无法满足,可以考虑我今天的这种方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好!对于数据删除速度过问题,有几个可能的原因和解决方法: 1. 索引问题:如果您的表没有适当的索引,删除操作可能会很。请确保在删除操作的列上创建索引,这将加速删除过程。 2. 锁问题:如果其他会话或事务正在访问要删除数据,可能会导致删除操作变。可以考虑在一个事务中执行删除操作,并确保其他会话或事务不会干扰。 3. 删除条件复杂:如果您的删除操作涉及复杂的条件或连接多个表,请确保查询语句(DELETE语句)的编写是有效且优化的。可以通过使用正确的索引、使用合适的WHERE子句和JOIN子句等方法来提高删除操作的效率。 4. 日志记录:某些数据库系统在执行删除操作时会记录事务日志,这可能会导致删除速度变。您可以考虑禁用或减少日志记录,以提高删除操作的速度。但请注意,禁用日志记录可能会导致数据无法回滚,所以请在谨慎操作之前备份数据。 5. 硬件资源限制:如果您的数据库服务器硬件资源有限,如CPU、内存或磁盘空间等,可能会影响删除操作的速度。请确保您的服务器具备足够的资源来处理大量数据删除。 请根据具体情况检查和尝试上述解决方法,以提高数据删除的速度。如果问题仍然存在,请提供更多关于您的环境和具体问题的信息,以便我们提供更精确的建议。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值