01.MySQL慢查询
1.1 什么是mysql慢查询
- MySQL的慢查询,全名是慢查询日志,是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句。
- 运行时间超过
long_query_time
值的SQL语句,则会被记录到慢查询日志中。 long_query_time
的默认值为10
,意思是记录运行10
秒以上的语句。
1.2 查找那些语句慢
1 | 比如,得到返回记录集最多的10个SQL。 |
1.3 explain分析慢查询原因
-
使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。
-
EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如何被搜索和排序的……等等,等等。
-
explain的执行效果
1 | explain select * from subject where id = 1 \G |
- 慢查询应该关注项
- type = ALL
- 全表扫描,说明没有使用索引
- 优化方向: 增加索引或者修改查询条件
- key = NULL
- 没有实际使用索引
- 优化方向:检查possible_keys,可能是索引设计不合理或者写法阻碍使用索引。
- rows 数值很大
- 说明扫描的行数哦很多,预估成本很高
- 优化方向:是否可以通过索引减少扫描的数据量?
- Extra包含Using filesort 或者 Using temporary
- 说明使用了磁盘排序或者临时表,这通常是性能瓶颈
- 优化方向: 尽量通过索引避免这类操作,比如 ORDER BY 字段加索引。
__END__