直接看type、key、rows和Extra四列可快速判断查询效率:type需避免ALL/index,key与key_len验证索引使用,rows与filtered评估扫描与过滤效果,Extra中Using filesort或temporary需优化。
直接看 type、key、rows 和 Extra 这四列,就能快速判断查询是否高效。其他字段辅助定位执行逻辑,但核心瓶颈往往藏在这几处。
type 表示 MySQL 怎么找数据,顺序从优到劣是:
system ≈ const > eq_ref > ref > range > index > ALL。
实际中重点关注是否掉到 index 或 ALL(全表扫描),这通常意味着缺索引或索引没用上。
WHERE id = 123)WHERE status = 'active',status 有普通索引)WHERE created_at > '2025-01-01'),可接受,但范围越大越慢key 显示实际生效的索引名;key_len 表示用了该索引的前多少字节。两者结合能验证索引使用是否充分。
(a,b,c),但只查了 WHERE a = 1,则 key_len 只含 a 的长度)WHERE a = 1 AND b = 2 AND c > 3)rows 是 MySQL 预估要检查的行数,不是返回行数;filtered 是这一层条件过滤后剩余比例(百分比)。两者相乘约等于实际参与下一级连接或返回的行数。
Extra 是执行过程中的补充行为,几个高频信号需立刻响应:
index condition” 区分,后者是索引条件下推,更优)