如何定位慢查询和如何分析 SQl 执行效率
1 定位慢 SQL
在开发中,经常会遇到一个接口返回数据的等待时间过长,这时候我们就需要查看是否因为慢sql导致, 定位慢 SQL 有如下两种解决方案:
-
1.查看慢查询日志确定已经执行完的慢查询
2.show processlist 查看正在执行的慢查询
下面我就介绍如何使用以及两者的使用场景:
1.1 通过慢查询日志
定位慢查询sql,一般的方法是通过慢查询日志来查询的,MySQL 的慢查询日志一般记录在 MySQL 中响应时间超过参数 long_query_time(单位秒,默认值 10)设置的值并且扫描记录数不小于 min_examined_row_limit(默认值0)的语句,通过查看这个日志能够帮我们找到执行完的慢查询,方便我们对这些 SQL 进行优化。
默认环境下,慢查询日志是关闭的。
1.首先开启慢查询日志
set global slow_query_log = on;
2.设置慢查询时间阀值
set global long_query_time = 1;(这里的单位是秒,我这里设置的是1秒)
3.确定慢查询日志路径
show global variables like “datadir”;
4.确定慢查询日志的文件名
show global variables like “slow_query_log_file”;
然后根据文件路径直接用tail命令查看日志就行了,如果大家觉得看系统日志不方便,也可以通过pt-query-digest 或者 mysqldumpslow 等工具对慢查询日志进行分析。
1.2 通过 show processlist;
有时候慢sql可能执行时间比较长,或者正在执行中,这时候如果想查慢sql,日志里是还没有记录的,这时候我们可以用show processlist来查看执行中的慢sql
show processlist;
Time:表示执行时间
Info:表示 SQL 语句
2 使用 explain 分析慢查询
这个网上有太多的优秀博文,这里我推荐一篇,大家可以直接去该博文了解详情
explain命令详解