type 字段:访问类型(性能核心指标)
- 优化目标:避免
ALL(全表扫描),尽量达到ref或range。 - 性能排序:
system > const > eq_ref > ref > range > index > ALLsystem:表仅一行数据(如系统表)。const:通过主键或唯一索引直接定位单行(如WHERE id = 1)。eq_ref:多表 JOIN 时,被驱动表的主键/唯一索引被完全使用(每行仅匹配一次)。ref:非唯一索引的等值查询(可能返回多行)。range:索引范围扫描(如BETWEEN、IN)。index:全索引扫描(遍历索引树,但未过滤数据)。ALL:全表扫描,性能最差,需通过索引优化避免 。
2. key 与 possible_keys:索引使用情况
possible_keys:可能使用的索引(若为空,说明无合适索引)。key:实际使用的索引。若为NULL,需检查 WHERE 条件或索引设计 。- 优化建议:
- 联合索引需遵循 最左前缀原则(如索引
(a, b, c)仅支持a、a AND b等条件)。 - 使用 覆盖索引(索引包含查询所需字段),使
Extra列显示Using index,减少回表操作 。
- 联合索引需遵循 最左前缀原则(如索引
3. rows:预估扫描行数
- 表示优化器估算需检查的行数,数值越小越好。
- 若实际行数与
rows差异大,可能因统计信息不准确,可通过ANALYZE TABLE更新 。
4. Extra:额外信息(关键优化提示)
Using index:使用覆盖索引,无需回表。Using where:WHERE 条件过滤了部分数据。Using filesort:需额外排序(如未使用索引排序),可通过索引优化避免。Using temporary:使用临时表(如 GROUP BY 无索引),需优化查询或索引 。
5. id 与 select_type:查询结构与执行顺序
id:- 相同 id 按顺序执行;不同 id 时,值越大优先级越高(如子查询 id 递增)。
select_type:SIMPLE:简单查询(无子查询或 UNION)。PRIMARY:外层查询。DERIVED:FROM 子句中的子查询,生成临时表。SUBQUERY:WHERE 中的子查询。- 避免
DEPENDENT SUBQUERY(子查询依赖外层结果),因其效率低下 。
6. key_len:索引使用长度
- 表示索引中使用的字节数,可判断是否充分利用组合索引。
- 例如,
varchar(20)的 utf8 字段,若key_len为 63(3*20 + 2),说明该字段被完整使用 。
- 例如,


Comments NOTHING