文章目录

  • 1.Explain能干嘛
  • 2.Explain包含的表头信息
  • 3.Explain-id(表的读取顺序)
    • 3.1 id相同
    • 3.2 id不同
    • 3.3 id相同又不同
  • 4. Explain-Select_type(数据读取操作的操作类型)
  • 5. Table
  • 6. Type
  • 7. possible_keys和key
  • 8. Key_len
  • 9. ref
  • 10. rows
  • 11. Extra

使用方式:Explain + SQL语句

1.Explain能干嘛

2.Explain包含的表头信息

3.Explain-id(表的读取顺序)

这里的id不是主键,它是一组数字12345这种,表示我们进行表查询的先后顺序,其中id可以有三种情况:id相同,id不同,id同时相同和不同

3.1 id相同

看一个demo:

这种情况下,根据Explain中的table信息从上而下执行

3.2 id不同

3.3 id相同又不同

4. Explain-Select_type(数据读取操作的操作类型)

这个字段的取值有以下几种:

这六种类型的解释如下:

5. Table

这个就不用多解释了,就是在explain显示后的数据中表示这一行的数据来自哪张表

6. Type

字面意思是访问类型,它有8种值:

这8种类型从好到差的顺序是:system>const>eq_ref>ref>range>index>ALL,下面来解释:

  • system:只有一行记录,相当于系统表,可以忽略不记
  • const:常量,表示通过索引一次就找到了,常用于匹配主键或者unique索引,值匹配一行数据
  • eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配
  • ref:非唯一性索引扫描,返回匹配到的某个值的所有行
  • range:只检索给定范围的行,一般情况下是where语句后加了between,>,<,in等条件
  • index和ALL:index遍历全部索引,ALL读全表,index比ALL块因为index从索引读取,ALL从硬盘读取

7. possible_keys和key

possible_keys:显示可能应用在这张表种的索引,一个或多个,但不一定被使用
Key:实际使用的索引,如果为NULL,则没有使用索引,若使用了覆盖索引,则该索引仅出现在Key列表种
覆盖索引

关于覆盖索引更详细的讨论请看:MySQL中最左原则和覆盖索引的讨论

8. Key_len

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度,在不损失精度的情况下,长度越短越好

9. ref

显示和索引匹配的哪一列被使用了,展示的就是与索引列做等值匹配的条件,如常量或某个列

10. rows

rows列显示MySQL认为它执行查询时必须检查的行数。注意这是一个预估值,越少越好

11. Extra

Extra是EXPLAIN输出中另外一个很重要的列,该列显示MySQL在查询过程中的一些详细信息,MySQL查询优化器执行查询的过程中对查询计划的重要补充信息。

类型 说明
Using filesort 说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取,MySql中无法利用索引完成的排序操作称为”文件排序“
Using temporary 用临时表保存中间结果,常用于GROUP BYORDER BY操作中,一般看到它说明查询需要优化了,就算避免不了临时表的使用也要尽量避免硬盘临时表的使用。
Not exists MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了。
Using index 说明查询是覆盖了索引的,不需要读取数据文件,从索引树(索引文件)中即可获得信息。如果同时出现using where,表明索引被用来执行索引键值的查找,没有using where,表明索引用来读取数据而非执行查找动作。这是MySQL服务层完成的,但无需再回表查询记录。
Using index condition 这是MySQL 5.6出来的新特性,叫做“索引条件推送”。简单说一点就是MySQL原来在索引上是不能执行如like这样的操作的,但是现在可以了,这样减少了不必要的IO操作,但是只能用在二级索引上。
Using where 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。注意:Extra列出现Using where表示MySQL服务器将存储引擎返回服务层以后再应用WHERE条件过滤。
Using join buffer 使用了连接缓存:Block Nested Loop,连接算法是块嵌套循环连接;Batched Key Access,连接算法是批量索引连接
impossible where where子句的值总是false,不能用来获取任何元组
select tables optimized away 在没有GROUP BY子句的情况下,基于索引优化MIN/MAX操作,或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。
distinct 优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作

附:

Mysql-Explain用法详解相关推荐

  1. 【MySQL】explain 用法详解

    [MySQL]explain 用法详解   explain命令主要来查看SQL语句的执行计划,查看该SQL语句有没有使用索引,有没有做全表扫描等.它可以模拟优化器执行SQL查询语句,从而知道MySQL ...

  2. MySQL explain结果详解

    Mysql Explain 结果详解 语法 explain < SQL statement> 例如: explain select * from t3 where id=3952602; ...

  3. mysql的explain怎么看_mysql中explain用法详解

    如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1 ...

  4. explain mysql怎么用_mysql中explain用法详解

    EXPLAIN用于SELECT语句中的每个表返回一行信息.表以它们在处理查询过程中将被MySQL读入的顺序被列出 如果在select语句前放上关键词explain,mysql将解释它如何处理selec ...

  5. MySQL中Explain用法详解

    Explain简介 我们在写后端程序的时候,通常会写sql来查询数据,如果是单表查询的时候,那直接select就完事了,但是如果是连表查询数据量也不小的话,就造成了查询速度会比较慢,那么我们该怎么知道 ...

  6. MySql数据库explain用法示例_mysql explain用法详解

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

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

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

  8. MySQL explain指令详解

    explain指令分析执行计划 文章目录 explain指令分析执行计划 查询结果各字段含义 1. id列 2. select_type列 3. table列 4. type列 5. key列 6. ...

  9. MySQL limit用法详解

    limit是MySQL中常用的关键字,经常了order by连用,用来进行筛选数据,用法也很简单,但不太细心的人可能不知道limit的一些细微用法 select * from table_name l ...

  10. explain 用法详解

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

最新文章

  1. 科大星云诗社动态20210304
  2. 网页附加题写出下图的html,附加题(写HTML文件):根据给定的博客名单,自动生成HTML网页...
  3. idea本地跑如何看gc日志_牛逼了!用 IDEA 扒出了开源组件导致FGC的原因
  4. VBA实战技巧精粹012:查找指定目录下的指定文件及Dir函数用法
  5. 三张表有重复字段_什么?搞不定Kafka重复消费?
  6. 云环境下大规模分布式计算数据感知的调度系统
  7. Maven3生命周期和插件
  8. 在线摇骰子/色子工具
  9. 线性回归的从零开始实现-08-p3
  10. jms pub/sub模型_JMS消息传递模型:点对点和发布/订阅
  11. matlab special,matlab的special函数用法
  12. mysql计算结果取整_Sql 获取向上取整、向下取整、四舍五入取整的实例(转)
  13. 如何学习大数据!!我要做大数据! 1
  14. Panic的概念和使用
  15. 如何使用 Podman 签署和分发容器镜像
  16. Red Team常用命令速查
  17. 2022 主站及创作侧年度总结 - 相信未来、期待未来
  18. c语言清除键盘缓冲区函数,C语言程序中清除键盘缓冲区的方法
  19. 实训一 机床夹具认识
  20. 浅析TVS管的ESD静电防护原理

热门文章

  1. 【动态规划案例】详细介绍投资问题
  2. 从零开始之驱动发开、linux驱动(六十五、内核调试篇--串口驱动)
  3. C++的switch与if语句,输入日期显示第几天
  4. 全球首起机器人杀人案进展;Roomba扫地机器人开始加入Alexa语音助手│IoT黑板报...
  5. JAVA相关的深度技术博客链接
  6. CSS3动画——steps函数
  7. python游戏服务器搭建教程_一文教你如何搭建http游戏服务器
  8. 竹间智能好吗?以认知转型,提升客户洞察能力
  9. 【快速排序(Quicksort)】
  10. 黄聪:超实用的PHPExcel[导入][导出]实现方法总结