首页/数据/SQL 速查/EXPLAIN type 访问类型解读
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条变更与事务52 条
性能与执行计划72 条

EXPLAIN type 访问类型解读

从 const、eq_ref、ref、range 到 ALL:type 列描述每张表的访问方式,注意 index 与 ALL 都可能是整树/整表扫描。

SQL 速查数据更新于 2026-10-12

常见 type 取值

type含义典型场景
const至多匹配一行主键或唯一索引与常量比较:WHERE id = 1
eq_ref连接时被驱动表每行至多匹配一行被驱动表用主键/唯一索引等值连接
ref非唯一索引等值查找,可匹配多行普通索引列 = 常量或连接键
range索引范围扫描BETWEEN、>、<、IN 作用于索引列
index遍历整棵索引树需要按索引顺序读取全部数据,或索引覆盖查询
ALL全表扫描没有可用索引,或优化器判断扫描更划算

示例

示例
EXPLAIN SELECT * FROM users WHERE id = 1;                -- const
EXPLAIN SELECT * FROM users WHERE email = 'a@x.com';      -- ref(email 非唯一索引)
EXPLAIN SELECT * FROM orders WHERE total BETWEEN 10 AND 20; -- range(total 有索引时)
type=index 出现在输出里不代表已经优化到位:它是扫描整棵索引,代价接近全表扫描。

易错点

  • 把 type=index 当作已用索引优化:需要继续看 key_len 与 Extra,判断过滤是否真正在索引层完成
  • eq_ref 只出现在连接场景:单表按唯一键查询显示 const 而非 eq_ref,不要对照错场景

数据来源与参考

  • MySQL 8.0 Reference Manual §8.8.2 EXPLAIN Output Format(type 列)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌