记一次线上MySQL慢查询的优化

哎,这次苦逼的经历,真泥坑爹,看了一下午SQL,眼睛都快看瞎了,现在终于解决了,总结一下吧.

中午的时候运维报了一个慢SQL出来.看了一下执行计划,没发现问题,SQL如下

执行计划如下图


这执行计划能跑44秒?我擦,怎么可能呢! 但是事实就是如此

下面就开始了苦逼的profiling

EXPLAIN看不出问题,那就profile看一下

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

发现这个Sending Data很慢(因为这个名字真的很误导人),曾经一度以为是数据库服务器有问题.结果运维的截图,打消了我的念头

这服务器现在的状态,爽的可以跑马.找了一个sending data,原来这个不只是把数据发送给客户端那么简单,这个是从查询开始,一直到返回给客户端数据的时间.不只是发送数据的时间. 这名字起的,真想打死作者有木有.

 

哎,又回到了原点,这泥玛蛋到底啥问题.EXPLAIN看不出问题,PROFILE也看不出问题, SQL没问题,服务器没问题,难道是我人品有问题吗?

就这样跑这SQL跑了半下午,各种试,各种百度,都没解决问题.然后就看WHERE条件一个个的找,有没有索引(其实这一步有点多余,没索引的话EXPLAIN的时候,就看出来了),结果发现都有索引. 然后又尝试了一下,把WHERE条件里的store_code这个条件字段,换成id, 我草,好快,1秒不到就完成了(哈哈哈哈,1秒已经很慢了,但是相比43秒,还是快了太多),然后就觉得,太奇怪了吧.store_code是有索引的啊,不可能这么慢.然后看了一下索引类型

 

 

 

 

 

 

 

 

我草, Full Text. 我还能说啥,然后改成唯一索引,马上效果就出来了,1秒不到就完成了.

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Captcha Code