MySQL explain 命令

概述

MySQLexplain 命令,主要用于查看实际查询过程中的一些执行细节(执行计划),也是查看优化器决定如何执行查询的主要方法

explain 使用示例

explain 的使用也很简单,在 select 语句之前增加 explain 关键字再执行整个语句即可。explain 的使用示例如下所示:

-- 在 select 语句前增加 explain 关键字即可
explain select id, name, age, register_date from user where name = '小美' and age = 22 and register_date = '2015-03-05'

最终返回的数据如下所示:
在这里插入图片描述

注意,如果在查询语句的 from 子句中不包含子查询的情况下,使用 explain 命令并不会真正地执行查询;但是如果包含了,那么 explain 仍然会执行子查询,并将子查询的查询结果放在临时表中。

explain 返回字段介绍

使用 explain 命令之后,将会返回优化器给这条查询语句制定的执行计划相关信息,这些信息里面主要包含以下的一些字段:

  • id:查询子句的执行顺序,值越大越先执行,相等的情况下,排在前面的先执行
  • select_type:查询类型,一共有三个取值
    • PRIMARY:代表的是复杂查询中最外层的 select 语句
    • DERIVED:代表的是 from 后面的子查询叫衍生表(或者派生表)
    • SUBQUERY:代表的是 select 中的子查询
  • table:表示数据从哪张表(或者哪个查询子句)查询出来
  • partitions:表示数据从哪个分区表中查询出来的(小知识:一张表底层是由一个或多个分区表组成的,不同的数据可能会放到不同的分区表上)
  • type:表示关联类型或访问类型,即 MySQL 决定如何查找表中的行,以及查找数据行记录的大概范围。性能从最优到最差分别为:
    • null:为空时,表示 MySQL 能在优化阶段分解查询语句,在执行阶段用不着再访问表或索引。例如:从表中查询最小的主键值
    • system:当查询的表中只有一条数据时
    • const:用于主键或唯一索引键的列与常数进行比较时
    • eq_ref:使用了主键或唯一索引的全部部分,被连接使用时,最多只会返回一条符合条件的记录。
    • range:通常出现在范围查找中,使用索引来检索给定范围的行
    • index:从二级索引的第一个叶子节点开始扫描,一直到最后一个叶子节点
    • ALL:从主键索引的第一个叶子节点开始扫描,一直到最后一个叶子节点
    • 一般来说,查询最好能达到 ref 级别,最低要达到 range 级别
  • posiible_keys:查询过程中可能会被使用到的索引
  • key:实际使用的索引。有可能 posiible_keys 不为空,但是 key 为空,因为 MySQL 最终会根据实际情况来判断是否使用索引,如果使用索引的代价比不使用索引的代价还大,那么 MySQL 将不会使用索引
  • key_len:显示了 MySQL 使用的索引字段长度,由这个值可以确定使用索引的部分
  • ref:查询字段的比较值,const (常量)或者具体的列的名称
  • rowsMySQL 预估的要扫描的行数
  • extra:一些额外信息
    • Using index:在符合使用覆盖索引的场景情况下
    • Using where:使用了 where 语句,且要比较的列上没有索引
    • Using index condition:查询的列没有完全被索引覆盖
    • Using temporary:查询过程中使用了临时表
    • Using filesort:使用外部排序,而非索引排序。如果数据较小时将在内存排序否则需要在磁盘完成排序
    • Select tables optimized away:使用某些聚合函数(比如:maxmin)来访问存在索引的某个字段时,结果直接可以用索引上获得
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值