mysql explain使用

发布于:2025-05-28 ⋅ 阅读:(26) ⋅ 点赞:(0)


通过 EXPLAIN 你可以知道:如是否使用索引、扫描多少行、是否需要排序或临时表

EXPLAIN 三板斧(type、key、Extra)

例子:

explain select * from user where 'name' = '小明'

type 访问类型

性能高到低

表示 MySQL 是如何查找表中的数据,怎么做数据检索的,是查询性能的关键指标

性能从高到低排序:

system > const > eq_ref > ref > range > index > ALL
  • system:表仅有一行数据(系统表或单行表),这是 const 的特例
  • const:通过主键或唯一索引查找,且查询条件是常量,性能极高,因为直接定位到单行数据
  • eq_ref:在多表连接(JOIN)中,通过主键或唯一索引进行等值匹配,每行只匹配一行数据,性能非常高,逐行精确匹配
  • ref:表示使用了非唯一的索引(普通索引),或者唯一索引的前缀进行等值匹配
  • range:通过索引进行范围扫描,返回符合条件的行(如 BETWEEN、>、< 等),性能中等,优于全表扫描但不如等值匹配
  • index:进行了全索引扫描,扫描整个索引树而不是表数据。只遍历索引树,不访问数据文件。
  • all:表示全表扫描,未使用索引

多注意

type 如果是从 range 以及一下就需要多留意关注了

type: index 出现的场景

  • 查询字段完全被索引覆盖
  • 复合索引覆盖查询字段和条件

key 实际使用的索引

key 会显示你使用的索引名

如果没用索引,那么这里会显示 NULL

Extra 额外信息

Using index: 表示使用了 覆盖索引(Covering Index),即查询的所有字段都在索引中,无需回表(性能最佳)

Using where: 表示存储引擎返回数据后,MySQL 服务器层需要再次过滤数据(可能需优化)

Using filesort: 表示需要文件排序(性能较差,需避免)

Using temporary: 表示需要创建临时表(性能差,需优化)

其他字段

select_type:查询的类型或复杂性,描述查询的结构(如简单查询、子查询、联合查询等)
possible_keys:查询可能使用的索引列表(可能,但不一定实际使用)
ref:显示索引的哪一列被使用,以及与之比较的值(如常量、列名),const,表示使用了等值匹配
rows:MySQL 估计需要扫描的数据行数(估算值),注意不是扫描是索引树中的数据条数
filtered:剩余满足查询条件的记录百分比


网站公告

今日签到

点亮在社区的每一天
去签到