一、开启并获取慢查询
(1)开启慢查询
show variables like ‘%query%’;
通过修改配置文件将 slow_query_log 设置为on,开启慢查询日志
通过设置 long_query_time 设置合适的慢查询时间(单位为秒)
通过设置 slow_query_log_file 设置慢查询日志的文件位置
(2)获取慢查询语句
两种方式:
一种直接到上面设置的慢查询日志中逐条查找汇总;
另一种方式是使用 mysqldumpslow 工具,该工具是 mysql 官方标配
# 找到你的 mysqldumpslow 工具所在位置
find/-name mysqldumpslow
# 进入工具所在目录
# 执行打印慢sql
mysqldumpslow
二、具体优化
通过 explain 分析 sql 的执行情况,主要关注type 、possible_keys、 key,rows 、Extra 这四个信息
注:先运行看看是否真的很慢,注意设置SQL_NO_CACHE
1、首先看扫描行数rows
如果扫描的行数和得到的结果集行数相差非常多,则说明没有建立合适的索引,这时应该为where条件下的列或order by 条件下的列创建索引
2、看possible_keys 和 keys
possible_keys 指的是mysql在执行时可能使用的索引,key 表示执行时实际使用的索引
如果 possible_keys 比 key 多,应该先看看 sql 是否符合最左匹配原则,让索引尽可能多的用上
3、看额外信息 Extra
根据Extra 具体分析
4、看type
type 表达了sql执行时的访问类型(MySQL决定如何查找表中的行)
到了这一步,实际上该建的索引都已经建好了,剩下的就是通过调整sql的编写方式,使其达到更优质的查询类型
三、案例
注:因为每个系统的数据量、数据表结构、数据库的配置等信息都不一样,因此适合别人系统的未必一定适合自己系统,不过我们可以参考别人的案例来反省自己的慢sql。看一遍,一定会有所收获的。