MySQL:explain

一、Explain 用法

explain模拟Mysql优化器是如何执行SQL查询语句的,从而知道Mysql是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。
语法:Explain + SQL 语句;如:Explain select * from user; 会生成如下 SQL 分析结果,下面详细对每个字段进行详解

在这里插入图片描述
二、id

是一组数字,代表多个表之间的查询顺序,或者包含子句查询语句中的顺序,id 总共分为三种情况,依次详解

  • id 相同,执行顺序由上至下
    在这里插入图片描述
  • id 不同,如果是子查询,id 号会递增,id 值越大优先级越高,越先被执行在这里插入图片描述
  • id 相同和不同的情况同时存在在这里插入图片描述

三、select_type

select_type 包含以下几种值

  • simple
  • primary
  • subquery
  • derived
  • union
  • union result

simple
简单的 select 查询,查询中不包含子查询或者 union 查询
在这里插入图片描述
primary
如果 SQL 语句中包含任何子查询,那么子查询的最外层会被标记为 primary
在这里插入图片描述
subquery
在 select 或者 where 里包含了子查询,那么子查询就会被标记为 subquery。
在这里插入图片描述
derived
在 from 中包含的子查询,会被标记为衍生查询,会把查询结果放到一个临时表中
在这里插入图片描述
union / union result
如果有两个 select 查询语句,他们之间用 union 连起来查询,那么第二个 select 会被标记为 union,union 的结果被标记为 union result。它的 id 是为 null 的
在这里插入图片描述
四、table
表示这一行的数据是哪张表的数据

五、type
type是代表 MySQL 使用了哪种索引类型,不同的索引类型的查询效率也是不一样的,type 大致有以下种类
system
const
eq_ref
ref
range
index
all
在这里插入图片描述
system
表中只有一行记录,system 是 const 的特例,几乎不会出现这种情况,可以忽略不计

const
将主键索引或者唯一索引放到 where 条件中查询,MySQL 可以将查询条件转变成一个常量,只匹配一行数据,索引一次就找到数据了
在这里插入图片描述
eq_ref
在多表查询中,如 T1 和 T2,T1 中的一行记录,在 T2 中也只能找到唯一的一行,说白了就是 T1 和 T2 关联查询的条件都是主键索引或者唯一索引,这样才能保证 T1 每一行记录只对应 T2 的一行记录
举个不太恰当的例子,EXPLAIN SELECT * from t1 , t2 where t1.id = t2.id
在这里插入图片描述
ref
不是主键索引,也不是唯一索引,就是普通的索引,可能会返回多个符合条件的行。
在这里插入图片描述
range
体现在对某个索引进行区间范围检索,一般出现在 where 条件中的 between、and、<、>、in 等范围查找中。
在这里插入图片描述
index
将所有的索引树都遍历一遍,查找到符合条件的行。索引文件比数据文件还是要小很多,所以比不用索引全表扫描还是要快很多。

all
没用到索引,单纯的将表数据全部都遍历一遍,查找到符合条件的数据

六、possible_keys
此次查询中涉及字段上若存在索引,则会被列出来,表示可能会用到的索引,但并不是实际上一定会用到的索引

七、key此次查询中实际上用到的索引

八、key_len表示索引中使用的字节数,通过该属性可以知道在查询中使用的索引长度,注意:这个长度是最大可能长度,并非实际使用长度,在不损失精确性的情况下,长度越短查询效率越高

九、ref显示关联的字段。如果使用常数等值查询,则显示 const,如果是连接查询,则会显示关联的字段。
在这里插入图片描述
十、rows根据表信息统计以及索引的使用情况,大致估算说要找到所需记录需要读取的行数,rows 越小越好

十一、extra不适合在其他列显示出来,但在优化时十分重要的信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值