Skip to content

type 字段是 MySQL EXPLAIN 输出中最重要的指标之一,它显示了查询使用了何种类型的连接。性能从好到差的排序通常为:system > const > eq_ref > ref > range > index > ALL

  • system

    • 表只有一行记录(系统表)。这是 const 连接类型的特例。
  • const

    • 表中至多有一个匹配行。
    • 通常出现在使用 PRIMARY KEYUNIQUE 索引与常量值进行比较时。
  • eq_ref

    • 对于来自前一张表的每一行组合,从该表中读取一行。
    • 除了 systemconst 之外,这是最好的连接类型。通常出现在连接使用主键或唯一索引时。
  • ref

    • 使用了索引,但该索引不是 PRIMARY KEYUNIQUE 索引。
    • 即对于前一张表的每一行组合,可能会匹配多行数据。
  • fulltext

    • 使用 FULLTEXT 索引执行连接。
  • ref_or_null

    • 类似于 ref,但 MySQL 会对包含 NULL 值的行进行额外的搜索。
  • range

    • 只检索给定范围内的行,使用索引来选择行(例如使用 between, <, >, in 等)。
  • index

    • ALL 类似,区别在于扫描的是索引树(Index Tree)。通常通过以下两种方式发生:
      1. 覆盖索引(Covering Index):查询所需的字段都在索引中,因此只需扫描索引树,不需要回表查询数据文件。
      2. 全索引扫描:使用索引顺序执行全表扫描来查找数据行。
  • ALL

    • 全表扫描(Full Table Scan)。这是性能最差的情况,通常需要优化。