提升批量删除数据库记录效率实践

在面临大量数据清理任务时,发现原始脚本使用短连接且数据未按分库分表规则排序,导致删除速度慢。通过改为长连接及对用户ID排序,优化后删除速度从50/s提升到200/s,提高了数据库操作效率。
摘要由CSDN通过智能技术生成

    今天做一个需求,需要清除掉DB中用户参与活动的记录,大概看了下, so easy, 提取出用户ID包,复用一个以前用到的清理清理脚本,后台运行の,慢悠悠的去打了杯水回来打开运行日志瞧了瞧,发现这清理速度咋这慢,每秒只删除50条,照这速度,得删到何年何月啊?!不行,得想改进办法。

    仔细分析,发现两个问题:

    1、脚本删除数据用了短连接,对删除数据量小的情况下影响不大,但是大数据量批量删除时,大量的重复连接不仅对删除速度影响很大,而且对数据库本身压力也会很大;

    2、用户ID包中的用户ID是随机的,但由于用户数较多,DB采用分库分表的方式来存储用户信息,分库分表规则为:对用户ID取模,根据用户ID最后两位,倒数三四位分库,建百库百表。很明显,如果数据包中用户ID是随机的话,那么删除数据时连接各数据库表也是在不断变化的,明显会影响删除速度。

    问题找到了,如何避免呢? 解决办法很简单:

    1、将短连接修改为长连接;

    2、对用户ID包按照数据库表规则进行排序,一个表一个表的数据进行删除。

    办法1很好解决,办法2需要抽象出问题的解决方法为:对用户ID包进行排序,首先按照用户ID进行全排序,再按照用户ID最后四位进行排序(两次排序效果是叠加的)。

    1、按照用户ID进行全排序:

    2、将用户ID后四位提取出来单独作为一列,作为后面排序的依据;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值