EXPLAIN 解读

粘贴 EXPLAIN 输出,自动翻译 type=ALL、key=NULL、Using filesort、Using temporary、Using join buffer 等关键信号,并给出对应的优化方向。

关于「EXPLAIN 解读」

把 MySQL 客户端里 EXPLAIN 的表格输出整块粘进来,逐行翻译成人话:type=ALL 是全表扫描、key=NULL 说明没走任何索引、Using filesort 表示排序用不上索引顺序、Using temporary 用了临时表、Using join buffer 说明被驱动表没有可用索引退化成了嵌套循环。每条都附带对应的修法,比如给 JOIN 列建索引、让排序列进入索引、用覆盖索引减少回表。

常见问题

rows 列准确吗?

不准确,它是优化器基于统计信息的估算值,不是实际扫描行数。多表连接时各表 rows 相乘只能作量级参考。

Using index 和 Using index condition 有什么区别?

前者是覆盖索引、不回表,是好事;后者是索引条件下推,仍然要回表。