MySQL EXPLAIN 中的 type 和 ref 字段

   在 MySQL 中,EXPLAIN 语句用于分析 SQL 查询的执行计划。EXPLAIN 输出的结果中包含多个字段,其中 type 和 ref 字段是理解查询执行方式的重要部分。

type 字段

  type 字段表示 MySQL 在查询过程中使用的访问类型,反映了查询的效率。访问类型从最优到最差的顺序如下:

  1. system:表仅有一行(等同于系统表)。这是访问类型中最优的情况。
  2. const:表最多有一个匹配行(使用主键或唯一索引)。在查询开始时优化器能将其转换为常量。
  3. eq_ref:对于每个来自前一张表的行组合,最多匹配一行。这通常用于主键或唯一索引扫描。
  4. ref:对于每个来自前一张表的行组合,匹配多行。这通常用于非唯一索引或非主键索引扫描。
  5. range:只检索给定范围的行,使用索引来选择行。这通常用于范围条件查询(如BETWEEN、>、< 等)。
  6. index:全索引扫描,类似于全表扫描,但遍历的是索引树。这通常比全表扫描快,因为索引文件通常比数据文件小。
  7. ALL:全表扫描。这是访问类型中最差的情况。

ref 字段

   ref 字段显示的是查询执行过程中使用的索引条件。它提供了有关查询如何利用索引来查找行的信息。ref 字段的值可以是以下几种类型:

  1. const:表示使用常量值进行索引查找。
  2. NULL:表示没有使用索引条件,通常出现在 ALL 或 index 类型的扫描中。
  3. 列名:表示使用某个列的值进行索引查找。
  4. 函数:表示使用某个函数的结果进行索引查找。

type 和 ref 的对应关系

1. system
  • ref:通常为 NULL,因为只有一行数据。
2. const
  • ref:通常为 const,表示使用常量值进行索引查找。
3. eq_ref
  • ref:通常为列名,表示使用某个列的值进行索引查找。例如,主键或唯一索引。
4. ref
  • ref:通常为列名,表示使用某个列的值进行索引查找。例如,非唯一索引或非主键索引。
5. range
  • ref:通常为列名,表示使用某个列的值进行范围查找。
6. index
  • ref:通常为 NULL,因为这是全索引扫描。
7. ALL
  • ref:通常为 NULL,因为这是全表扫描。

结论

 EXPLAIN 语句中的 type 和 ref 字段是理解查询执行计划的重要部分:

  • type 字段表示 MySQL 在查询过程中使用的访问类型,从最优到最差的顺序为:systemconsteq_refrefrangeindexALL
  • ref 字段显示查询执行过程中使用的索引条件,可能的值包括:constNULL、列名和函数结果。

通过分析 type 和 ref 字段的值,可以了解查询是如何利用索引进行优化的,从而帮助开发者进行查询优化,提高数据库的响应速度。

上一篇:【YOLOv5进阶】——替换主干网络(backbone)-MobileNet为例


下一篇:react v18 less使用(craco)-方案、craco(推荐)