0
点赞
收藏
分享

微信扫一扫

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

小迁不秃头 2022-01-28 阅读 40


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 条评论