mysql的explain字段解析

EXPLAIN关键字可以模拟优化器执行SQL查询语句,分析查询语句或者是表结构的性能瓶颈。

相关字段含义如下:

字段含义
id表示执行的优先级,值越大优先级越高(多见于子查询);id值一样的情况下,从上往下顺序执行。
select_type表示select的类型,常见取值有simple(简单表,即不使用表连接或者子查询),primary(主查询,即外层的查询),subquery(子查询),union(union关键字后面的select),derived(衍生,from子句的子查询)
table查询的表
type查询使用了何种类型,最好到最差的连接类型:system>const>eq_ref>ref>range>index>all, (一般来说,SQL语句得保证查询达到range级别,最好达到ref)
possible_keys可能使用的索引
key实际使用的索引
key_len索引的最大可能长度,在不损失精确性的情况下,长度越短越好。
ref显示了哪些列或常量被用于查找索引列上的值。常见的值有:const,func,null,字段名。
rows扫描行的数量
filtered指返回结果的行占需要读到的行(rows列的值)的百分比,一般来说越大越好。
extra执行情况的额外信息描述

type字段说明:

  • system:表中只有一条数据,等于系统表(引擎只能使MYISAM和MEMORY)
  • const:使用主键或者唯一索引,可以将查询的变量转成常量。(例如:… where id=3 或者where name=‘name1’
  • eq_ref:类似ref,区别在于使用唯一索引,返回匹配的唯一一条数据(通常在连接时出现,例如:explain select t1.name from t1, t2 where t1.name= t2.name)。
  • ref: 非唯一性索引,可以返回多行匹配的数据。
  • range: 范围查询,使用索引返回一个范围中的行(例如:… where id >3)
  • index: 以索引顺序进行全表扫描,优点是不用排序,缺点是还要全表扫描。
  • all: 全表扫描,应尽量避免。

extra字段说明:

  • using index: 使用了覆盖索引,覆盖索引的好处是一条SQL通过索引就可以返回我们需要的数据, 不需要通过索引回表。
  • using index condition: 在5.6版本后加入的新特性:索引下推(Index Condition Pushdown),索引下推是在非主键索引上的优化,可以有效减少回表的次数,大大提升了查询的效率。。查询的列不完全被索引覆盖,where条件中是一个前导列的范围。会先条件过滤索引,过滤完索引后找到所有符合索引条件的数据行,随后用 WHERE 子句中的其他条件去过滤这些数据行; using index condition = using index + 回表 + where 过滤。
  • using where: 查询时没使用到索引,然后通过where条件过滤获取到所需的数据。
  • using temporary: 表示查询时,mysql使用临时表保存结果。效率较低,应当尽量避免。
  • using filesort: 当SQL中包含 ORDER BY 操作,而且无法利用索引完成排序操作的时候,MySQL不得不选择相应的排序算法来实现,这时就会出现Using filesort,效率较低,应该尽量避免。

mysql慢查询参考:https://blog.csdn.net/qq_40884473/article/details/89455740
索引优化规约参考:https://www.cnblogs.com/riches/p/14755799.html
索引优化参考: https://www.cnblogs.com/riches/p/14805926.htm

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值