Appearance
MySQL Explain 实战:type、key、rows、extra 到底先看哪个
EXPLAIN 几乎是 MySQL 排查查询性能时必看的工具。
但很多人第一次看它时会觉得:
- 列很多
- 信息很多
- 不知道先看哪一个
先说结论
对大多数业务排查来说,更实用的阅读顺序通常是:
keytyperowsExtra
也就是先看:
- 用了什么索引
- 扫描方式如何
- 预估扫多少行
- 有没有临时表、文件排序、覆盖索引等信号
一、为什么不要一上来背所有列
因为慢 SQL 排查最重要的是快速抓住问题方向,而不是把所有 explain 列都背下来。
很多时候真正关键的信息只集中在少数几列里。
二、key:先看用没用对索引
key 很直观:
- 它告诉你最终用了哪个索引
如果一个高频查询本来就应该走某个索引,但这里显示:
- 没用索引
- 或用的是不理想的索引
那就已经很值得重点看了。
三、type:再看扫描方式
type 可以粗略反映:
- 当前这条 SQL 的访问方式是不是比较“笨重”
不用死记所有类型,但要形成一个直觉:
- 越偏全表、大范围扫描,通常越需要警惕
四、rows:预估扫描行数很关键
这一列经常特别有用。
如果你只是查几十条数据,但 rows 显示要扫十几万、几十万行,那慢的根因往往已经呼之欲出了。
五、Extra:这里最容易看到“危险信号”
尤其可以重点留意:
Using filesortUsing temporaryUsing index
这些并不一定代表“绝对错误”,但能帮助你快速判断:
- 排序是不是额外开销大
- 是否用了临时表
- 是否命中覆盖索引
六、一个更实际的使用方法
不要把 explain 当成“理论工具”,而要把它当成:
- SQL 写法和执行结果之间的翻译器
更好的习惯是:
- 改一版 SQL
- 看 explain
- 对比扫描路径有没有变
一句话总结
看 explain 最重要的不是背全,而是先抓关键字段:
keytyperowsExtra
把这几个看顺了,慢 SQL 排查效率会高很多。