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.解决办法
  • 根据分区删除数据
  • 根据索引删除数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值