概述

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)来访问存在索引的某个字段时,结果直接可以用索引上获得

MySQL explain 命令相关推荐

  1. mysql explain insert_简述Mysql Explain 命令

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息帮 ...

  2. MySQL explain命令

    简介 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈,在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返 ...

  3. Mysql学习总结(69)——Mysql EXPLAIN 命令使用总结

    explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句.使用方法,在select语句前加上explain就可以了.如: 1.EXPLA ...

  4. MySQL Explain命令详解--表的读取顺序,数据读取操作的类型等

    表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的) 不损失精确 ...

  5. 60-200-050-使用-命令-MySQL explain命令

    文章目录 1.explain使用方法 2.ID 3. select type 4.table 5.Type 5.0 null 5.1 system 5.2 const 5.3 eq_ref 5.4 r ...

  6. mysql explain参数_MySQL命令 Explain参数说明

    MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain命令的使用及相关参数说明. EXPLAIN Output Columns 列名说明id执行编号,标识select ...

  7. mysql explain ref列_MySQL EXPLAIN详解

    MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45 MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain命令 ...

  8. mysql中explain命令

    原文链接:https://blog.csdn.net/jiadajing267/article/details/81269067 其他文章: https://www.cnblogs.com/tufuj ...

  9. Mysql中explain命令查看语句执行概况

    Mysql中可以使用explain命令查看查询语句的执行方式,使用方法举例:explain + 查询语句 例如:explain select * from user_info 几个重要的字段说明: t ...

最新文章

  1. 阿里大佬分享API网关在微服务架构中的应用
  2. centos安装ssdb
  3. SQLServer查询死锁
  4. 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
  5. 十三、流程控制之if语句
  6. 电影院为何有散落的青瓜?
  7. java如何处理灰度图片_Java图片的灰度处理方法
  8. Android之设置横屏竖屏
  9. 03. Java NIO Channel 通道
  10. 5G学习-3GPP协议入门
  11. JS验证邮箱 身份证 VISA 卡[转]
  12. 如何在PC上显示Hololens的视野
  13. java 读取xls、xlsx文件
  14. 微信小程序之评分页面
  15. python资格证_掌握核心竞争力:五大数据科学类资格证书
  16. 抖音上很火的3D立体动态相册
  17. 日常英语单词 - 足球
  18. Win10改用microsoft账户登录发生了错误怎么解决?
  19. 电子科学与技术转计算机容易吗,电子信息专业要不要转到计算机科学与技术专业??...
  20. [娱乐数学建模]如何优雅的吃掉肉夹馍并且不让肉从旁边溢出来

热门文章

  1. python—列表、字典生成式
  2. android一个工程的xml怎么引用另外一个工程的xml,如何在Android中使用XML引用库中另一个包的字符串?...
  3. l298n电机驱动模块使用方法_SPDK virtio 驱动模块介绍及使用
  4. 在数组中查找第k个最大元素_查找数组中每个元素的最近最大邻居
  5. 一文玩转 EhCache 缓存框架!
  6. 给所有开发人员的 11 条忠告(第 4 条亮了)
  7. windows自定义快速启动(运行)命令
  8. EF中报错:附加类型“xxxx”的实体失败,因为相同类型的其他实体已具有相同的主键值。
  9. latex插入图片之后出现大段空白,并且紧随其后的文字如同被覆盖一般不见了
  10. 蓝桥杯 算法训练(四)结点选择(树形动态规划)