Mysql删除数据特别慢及解决方法

Mysql删除数据特别慢及解决方法

1.前言

笔者的mysql表数据量大概是1亿条,然后直接删除某一批次数据的时候,删除操作极其缓慢,执行了很久之后都不能删除成功。我就终止这个操作了。

2.问题

但是再次执行删除操作,但是是根据分区执行的时候,遇到的问题是:刚开始删除特别快,但是越删越慢。执行过程如下:

mysql> delete from fact_sales_temp where process_id = 181017201954166180 and pay_feed_back_date_Key = 20180523;
Query OK, 15640 rows affected (1.09 sec)

mysql> delete from fact_sales_temp where process_id = 181017201954166180 and pay_feed_back_date_Key = 20180524;
Query OK, 15534 rows affected (1.08 sec)

mysql> delete from fact_sales_temp where process_id = 181017201954166180 and pay_feed_back_date_Key = 20180525;
Query OK, 18189 rows affected (1.90 sec)

mysql> delete from fact_sales_temp where process_id = 181017201954166180 and pay_feed_back_date_Key = 20180526;
Query OK, 21520 rows affected (1.42 sec)

mysql> delete from fact_sales_temp where process_id = 181017201954166180 and pay_feed_back_date_Key = 20180527;
Query OK, 18468 rows affected (1.47 sec)

mysql> delete from fact_sales_temp where process_id = 181017201954166180 and pay_feed_back_date_Key = 20180528;
Query OK, 15444 rows affected (6.64 sec)

mysql> delete from fact_sales_temp where process_id = 181017201954166180 and pay_feed_back_date_Key = 20180529;
Query OK, 16111 rows affected (58.20 sec)

mysql> delete from fact_sales_temp where process_id = 181017201954166180 and pay_feed_back_date_Key = 20180530;
Query OK, 16402 rows affected (59.01 sec)

mysql> delete from fact_sales_temp where process_id = 181017201954166180 and pay_feed_back_date_Key = 20180531;
Query OK, 17129 rows affected (1 min 5.24 sec)

其中的pay_feed_back_date_Key字段是fact_sales_temp这个表的分区字段。

3.原因

为什么都是执行删除相同分区的操作,而且数据量的分布大致相同,但是得到的结果却是不一样的呢?
我的个人猜测如下:
虽然直接使用delete操作没有执行成功,但是数据库已经将部分满足条件的数据拿到了缓冲区里。导致删除这部分的数据的时候就执行的非常快。相反,后面的一些数据没有加入到缓冲区中,导致执行删除操作的时候就非常慢了。

4.解决办法
  • 根据分区删除数据
  • 根据索引删除数据
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
引用\[1\]中提到,最近在内部开发测试的服务器上,对某些表进行数据清空的操作时,使用delete、truncate、drop等操作都会出现长时间等待的情况,无法成功清空和删除整个表。尝试使用where子句进行单条和多条数据的delete操作,虽然成功操作了一两次,但之后仍然会出现卡死的情况。甚至尝试删除并重建表也会卡死。 引用\[2\]中提到,有一条delete语句中使用了flag != 1的条件来删除除了1以外的数据,但却没有删除flag为Null的数据。 针对这个问题,可以尝试以下解决方法: 1. 确保数据库连接正常,网络稳定。可以尝试重新连接数据库或者重启数据库服务。 2. 检查表的索引和约束是否正确设置,特别是外键约束。如果存在外键约束,需要先删除相关的外键数据,再进行删除操作。 3. 检查表的大小和数据量,如果表的数据量非常大,删除操作可能会耗费较长时间。可以考虑分批次删除或者使用更高效的删除方式,如使用truncate语句。 4. 检查数据库的日志文件是否过大,如果日志文件过大可能会导致删除操作变慢。可以尝试清理或压缩数据库的日志文件。 5. 如果以上方法都无效,可以尝试使用更底层的方式进行删除,如使用物理删除或者直接删除数据文件。但在进行这些操作之前,请务必备份数据库以防数据丢失。 总之,无法删除数据的问题可能由多种原因引起,需要逐一排查并尝试不同的解决方法。如果问题仍然存在,建议联系数据库管理员或专业的技术支持人员进行进一步的排查和解决。 #### 引用[.reference_title] - *1* [MySQL数据无法清空,无法删表问题](https://blog.csdn.net/JALECY/article/details/129624309)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Mysql数据库delete操作没报错,却删除不了数据](https://blog.csdn.net/m0_64284147/article/details/121695772)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [mysql中delete删除失败问题](https://blog.csdn.net/heng_yan/article/details/89563683)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值