mysql explain使用


通过 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:剩余满足查询条件的记录百分比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

abcnull

您的打赏是我创作的动力之一

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值