天天看点

mysql 慢查询 定位过程,和order by有关

最近有同事反馈mysql 主备同步告警超时比较多,首先使用

show processlist;
           

看了下,有很多查询语句状态显示Sending data,网上查阅了相关资料,提示"Sending data" 状态是指mysql处理结果并回传给客户端的阶段。查询语句大概长这样

select * from table where t1 <= now() and t2 >= now() and v1 = 0 and v2 = 1 order by id asc limit 100
           

 使用explain 命令看了下这条语句,显示使用了主键索引,我觉得这里主键索引主要用在order by里面排序,根据业务逻辑看了下,这里排序是没有必要的,于是去掉了order by id asc,重新explain 了一下,使用了t1和t2联合索引,查询速度也从原来0.7s降到了0.18s,降了大概75%。效果还是挺明显。

对于类似的问题,分析思路大概都是先看下语句卡在哪里,可以通过show processlist,然后对语句进行优化,使用explain查看使用到哪些索引等等。

================================================================================================

Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。...

继续阅读