Mysql删除数据特别慢

版权声明:如若转载,请联系作者。 https://blog.csdn.net/liu16659/article/details/83118495

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.解决办法

猜你喜欢

转载自blog.csdn.net/liu16659/article/details/83118495
今日推荐