如何定位并优化慢查询SQL【简单例子】
- 根据慢日志定位慢查询SQL
- 使用explain等工具分析SQL
- 修改SQL让SQL尽量走索引
1. 根据慢日志定位慢查询SQL
-
变量
-
SHOW VARIABLES like '%query%'; -- 查看慢查询的相关变量 -- 在重启数据库服务的时候会还原为原本的配置,如果需要永久改变就直接改数据库配置文件 -- 开启慢查询 SET GLOBAL slow_query_log = on; -- 超时时间设置为1s SET GLOBAL long_query_time = 1; -- 需要重新连接数据库才能看到改变
-
SHOW STATUS LIKE '%Slow_queries%'; -- 查看本次会话慢查询的条数(关闭客户端之后,就会自动清零)
-
2. 使用explain等工具分析SQL
-
explain
-
-- 在慢查询SQL前加explain再执行,即可得到分析结果 EXPLAIN SELECT * FROM visit_log ORDER BY uuid DESC
-
type
all
、index
、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好)- 出现
all
和index
就说明很有可能需要优化
- 出现
-
extra
- 一般出现下面两种需要调优
Using filesort
:表示 MySQL 会对结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容。可能在内存或者磁盘上进行排序。MySQL中无法利用索引完成的排序操作称为"文件排序”Using temporary
:表示 MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询groupby.
- 一般出现下面两种需要调优
-
3. 修改SQL让SQL尽量走索引
-
-- 换一个有索引的字段 -- 加索引, alter table [表名] add index idx_name([字段名]);
个人博客:txyun5.linshiyou.cn