MySQL慢查询分析
一、开启慢SQL配置
Linux系统在mysql配置文件 /etc/my.cnf 增加
slow_query_log=1 long_query_time=0.1 # 单位秒(100ms)
配置完后重启mysql,systemctl restart mysql
二、慢查询查询是否生效
show variable like "%slow_query_log%"
三、慢查询日志分析
/usr/bin 目录下,使用mysql自带命令:mysqldumpslow
常用参数:
1、-s 是order排序,主要有 c、t、l、r和ac、at、al、ar,分别是安装query次数、时间、lock时间、返回的记录数排序
2、-a 倒序排序
3、-t 是top n的意思,即取前面多少条的数据
4、-g 后边可以写一个正则匹配模式,大小写不敏感
常用命令:mysqldumpslow -s at -t 50 host-slow.log (显示耗时最长的50个SQL语句的执行信息)
四、通过执行计划分析SQL语句
SQL语句前添加 explain
explain select id from user where username="admin";
执行计划结果分析
type 可能的值,自上到下性能越来越差
1、const -- 只有一个匹配行,用到primary key、unique key
2、Eq_ref --唯一性索引扫描
3、ref -- 非唯一性索引扫描,或只使用了联合索引的最左侧前缀
4、range -- 索引扫描范围,在索引上进行给定范围的检索,如 between、in
5、index -- 遍历索引
6、ALL -- 全表扫描,最不合理