Mysql删除大量数据几种方案_MySQL 快速删除大量数据(千万级别)的几种实践方案——附源码...

面对每天新增776万条记录,存储7天后需要快速删除的历史数据,最初使用`DELETE`语句导致删除耗时3个半小时。通过批量删除、增大`key_buffer_size`、使用`DELETE QUICK + OPTIMIZE TABLE`以及实施表分区,最终将删除时间优化至1秒左右。文章详述了每一步的优化过程和相关Python实现代码。
摘要由CSDN通过智能技术生成

c00333f390670ad69c9ad00cefffaced.png

笔者最近工作中遇见一个性能瓶颈问题,MySQL表,每天大概新增776万条记录,存储周期为7天,超过7天的数据需要在新增记录前老化。连续运行9天以后,删除一天的数据大概需要3个半小时(环境:128G, 32核,4T硬盘),而这是不能接受的。当然如果要整个表删除,毋庸置疑用

TRUNCATE TABLE就好。

最初的方案(因为未预料到删除会如此慢),代码如下(最简单和朴素的方法):

delete from table_name where cnt_date <= target_date

后经过研究,最终实现了飞一般(1秒左右)的速度删除770多万条数据,单张表总数据量在4600万上下,优化过程的方案层层递进,详细记录如下:

批量删除(每次限定一定数量),然后循环删除直到全部数据删除完毕;同时key_buffer_size由默认的8M提高到512M

运行效果:删除时间大概从3个半小时提高到了3小时

(1)通过limit(具体size 请酌情设置)限制一次删除的数据量,然后判断数据是否删除完,附源码如下(Python实现):

defdelete_expired_data(mysqlconn, day):

mysqlcur=mysqlconn.cursor()

delete_sql= "DELET

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值