mysql 执行计划中eq_ref是什么意思?

在 MySQL 的执行计划中,eq_ref 是一种连接类型(type),表示查询优化器在使用**主键(PRIMARY KEY)唯一索引(UNIQUE INDEX)**进行等值匹配(=)时,对表的访问方式。它通常出现在多表关联查询(如 JOIN)中,且被驱动表的连接条件使用了主键或唯一索引。


关键特点

  1. 等值匹配
    连接条件必须使用 = 操作符,例如:ON table1.id = table2.id

  2. 唯一性约束
    被驱动表的连接字段必须是主键或唯一索引,确保每个驱动表的记录在被驱动表中最多匹配一行

  3. 高效性
    由于唯一性约束,eq_ref 是性能最优的连接类型之一,仅次於 const(单表常量查询)。


示例场景

假设有两个表:

  • users:主键为 id
  • orders:外键 user_id 引用 users.id,且 user_id 是唯一索引。

执行以下关联查询:

EXPLAIN SELECT * 
FROM users
JOIN orders ON users.id = orders.user_id;

执行计划中 orders 表的访问类型会是 eq_ref,因为:

  • users.id 是主键。
  • orders.user_id 是唯一索引,确保每个 users 记录在 orders 表中最多匹配一行。

ref 的区别

  • ref:使用非唯一索引进行等值匹配,可能返回多行。例如普通索引。
  • eq_ref:使用主键或唯一索引进行等值匹配,最多返回一行,性能更高。

如何优化到 eq_ref

  1. 确保连接字段有唯一索引
    为被驱动表的连接字段添加主键或唯一索引。
  2. 检查查询条件
    确保连接条件使用 = 且字段类型一致。

总结

eq_ref 表示通过主键或唯一索引实现高效的等值关联查询,是优化良好的执行计划标志。若查询中出现 eq_ref,通常说明索引设计合理,关联查询性能较高。

你可能感兴趣的:(mysql,数据库)