最近有同事反馈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),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。...
通过去除不必要的排序,将查询语句的执行时间从0.7秒降低到0.18秒,优化了75%。文章详细介绍了如何使用explain命令检查索引使用情况,并通过调整SQL语句提高数据库性能。
1348

被折叠的 条评论
为什么被折叠?



