Mysql-Explain用法详解
文章目录
- 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 BY 和 ORDER 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用法详解相关推荐
- 【MySQL】explain 用法详解
[MySQL]explain 用法详解 explain命令主要来查看SQL语句的执行计划,查看该SQL语句有没有使用索引,有没有做全表扫描等.它可以模拟优化器执行SQL查询语句,从而知道MySQL ...
- MySQL explain结果详解
Mysql Explain 结果详解 语法 explain < SQL statement> 例如: explain select * from t3 where id=3952602; ...
- mysql的explain怎么看_mysql中explain用法详解
如果在select语句前放上关键词explain,mysql将解释它如何处理select,提供有关表如何联接和联接的次序. explain的每个输出行提供一个表的相关信息,并且每个行包括下面的列: 1 ...
- explain mysql怎么用_mysql中explain用法详解
EXPLAIN用于SELECT语句中的每个表返回一行信息.表以它们在处理查询过程中将被MySQL读入的顺序被列出 如果在select语句前放上关键词explain,mysql将解释它如何处理selec ...
- MySQL中Explain用法详解
Explain简介 我们在写后端程序的时候,通常会写sql来查询数据,如果是单表查询的时候,那直接select就完事了,但是如果是连表查询数据量也不小的话,就造成了查询速度会比较慢,那么我们该怎么知道 ...
- MySql数据库explain用法示例_mysql explain用法详解
explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了,如: explai ...
- MySQL Explain命令详解--表的读取顺序,数据读取操作的类型等
表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度(key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的) 不损失精确 ...
- MySQL explain指令详解
explain指令分析执行计划 文章目录 explain指令分析执行计划 查询结果各字段含义 1. id列 2. select_type列 3. table列 4. type列 5. key列 6. ...
- MySQL limit用法详解
limit是MySQL中常用的关键字,经常了order by连用,用来进行筛选数据,用法也很简单,但不太细心的人可能不知道limit的一些细微用法 select * from table_name l ...
- explain 用法详解
explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 使用方法,在select语句前加上explain就可以了: 如: expla ...
最新文章
- 科大星云诗社动态20210304
- 网页附加题写出下图的html,附加题(写HTML文件):根据给定的博客名单,自动生成HTML网页...
- idea本地跑如何看gc日志_牛逼了!用 IDEA 扒出了开源组件导致FGC的原因
- VBA实战技巧精粹012:查找指定目录下的指定文件及Dir函数用法
- 三张表有重复字段_什么?搞不定Kafka重复消费?
- 云环境下大规模分布式计算数据感知的调度系统
- Maven3生命周期和插件
- 在线摇骰子/色子工具
- 线性回归的从零开始实现-08-p3
- jms pub/sub模型_JMS消息传递模型:点对点和发布/订阅
- matlab special,matlab的special函数用法
- mysql计算结果取整_Sql 获取向上取整、向下取整、四舍五入取整的实例(转)
- 如何学习大数据!!我要做大数据! 1
- Panic的概念和使用
- 如何使用 Podman 签署和分发容器镜像
- Red Team常用命令速查
- 2022 主站及创作侧年度总结 - 相信未来、期待未来
- c语言清除键盘缓冲区函数,C语言程序中清除键盘缓冲区的方法
- 实训一 机床夹具认识
- 浅析TVS管的ESD静电防护原理
热门文章
- 【动态规划案例】详细介绍投资问题
- 从零开始之驱动发开、linux驱动(六十五、内核调试篇--串口驱动)
- C++的switch与if语句,输入日期显示第几天
- 全球首起机器人杀人案进展;Roomba扫地机器人开始加入Alexa语音助手│IoT黑板报...
- JAVA相关的深度技术博客链接
- CSS3动画——steps函数
- python游戏服务器搭建教程_一文教你如何搭建http游戏服务器
- 竹间智能好吗?以认知转型,提升客户洞察能力
- 【快速排序(Quicksort)】
- 黄聪:超实用的PHPExcel[导入][导出]实现方法总结