一、媒介
开辟须要按期的删除表里一准时光以前的数据,SQL 如下
那么还有什么办法却竽暌古化这个本来竽暌功该很快的萌芽呢?
- mysql > delete from testtable WHERE biz_date <= '2017-08-21 00:00:00' AND status = 2 limit 500\G
mysql > delete from testtable WHERE biz_date <= '2017-08-21 00:00:00' AND status = 2 limit 500\G前段时光在优化的时刻,已经在响应的萌芽前提上加上了索引
- KEY `idx_bizdate_st` (`biz_date`,`status`)
然则实际履行的 SQL 依然异常慢,为什么呢,我们来一步步分析验证下
那我们试下直倔强迫让他走索引呢?
二、分析
表上的字段既然都有索引,那么按照之前的文┞仿分析,是两个字段都可以走上索引的。如不雅有疑问,请参考文┞仿 10 分钟让你明白 MySQL 是若何应用索引的
既然可以或许应用索引,表的总大年夜小也就是 200M 阁下,那么为什么形成了慢查呢?
我们查看履行筹划,去掉落 limit 后,发明他选择了走全表扫描。
- mysql > desc select * from testtable WHERE biz_date <= '2017-08-21 00:00:00' ;
- +----+-------------+-----------+------+----------------+------+---------+------+--------+-------------+
- | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
- +----+-------------+-----------+------+----------------+------+---------+------+--------+-------------+
- | 1 | SIMPLE | testtable | ALL | idx_bizdate_st | NULL | NULL | NULL | 980626 | Using where |
- +----+-------------+-----------+------+----------------+------+---------+------+--------+-------------+
- 1 row in set ( 0.00 sec)
- -- 只萌芽biz_date
- -- 关键点:rows: 980626 ;type:ALL
- mysql > desc select * from testtable WHERE biz_date <= '2017-08-21 00:00:00' and
推荐阅读
党的十九大年夜申报提出,在深化供给侧构造性改革中,推动互联网、大年夜数据、人工智能和实体经济深度融合。是以,为赓续加强经济立异力和竞争力,我国经济体系体例中“互联网+”经济模式将>>>详细阅读
本文标题:一个不可思议的MySQL慢查分析与解决
地址:http://www.17bianji.com/lsqh/38638.html
1/2 1