Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >MYSQL explain执行计划解读

MYSQL explain执行计划解读

作者头像
码农编程进阶笔记
发布于 2021-07-20 06:59:25
发布于 2021-07-20 06:59:25
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

点击上方“码农编程进阶笔记”,选择“置顶或者星标”

Explain 查看SQL语句的执行计划:分析SQL执行计划,优化SQL及索引策略,run faster.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EXPLAIN SELECT * from user_info WHEREid = 1; 

Explain查看查询计划主要包含如下信息列:查询id、查询类型、查询表、扫描访问类型、查询可能选用的索引、查询实际使用索引、mysql决定使用索引长度、ref 显示哪个字段或常数与key一起被使用、估算扫描行数、额外重要信息。--重点关注加粗部分。

主要通过以上指标评估查询好坏,从而做出相关调整优化,使SQL尽量最优。


explain结果各列含义:

一、id :select查询的序列号

二、select_type:

select查询的类型,主要是区别 普通查询和联合查询、子查询之类的复杂查询。

  1. SIMPLE:查询中不包含子查询或者UNION
  2. PRIMARY: 查询中若包含任何复杂的子部分,最外层查询被标记为PRIMARY
  3. SUBQUERY: 在SELECT或WHERE列表中包含了子查询
  4. DERIVED(衍生): 在FROM列表中包含的子查询
  5. UNION:UNION中的第二个或后面的SELECT语句
  6. UNION RESULT: UNION结果

三、table: 查询表

四、type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般来说,得保证查询至少达到range级别,最好能达到ref。

ALL: 扫描全表

index: 只遍历索引树,直接从索引中就可以获取数据满足查询, 而不需要再去查询数据表中的数据. 这样的情况type 是index, 并且 Extra 的值是Using index.

range: 使用索引范围查询, 通过索引字段范围获取表中部分数据记录. 这个类型通常出现在 <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中.

ref:非唯一性索引(普通索引)扫描,返回匹配某个单独值的所有行。常见于使用非唯一索引即唯一索引的非唯一前缀进行的查找

eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描

const, system: 当MySQL对查询某部分进行优化,并转换为一个常量时,使用这些类型访问。如将主键置于where列表中,MySQL就能将该查询转换为一个常量。system是const类型的特例,当查询的表只有一行的情况下, 使用system。

NULL: MySQL在优化过程中分解语句,执行时甚至不用访问表或索引。

五、possible_keys: 此次查询中可能选用的索引

六、key: 此次查询中实际使用到的索引.如果没有索引被选择,键是NULL

七、key_len:显示MySQL决定使用的键长度。表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。如果键是NULL,长度就是NULL。文档提示特别注意这个值可以得出一个多重主键里mysql实际使用了哪一部分。

注:key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。

八、ref:显示哪个字段或常数与key一起被使用。

九、rows: 显示此查询一共扫描了多少行才能找到. 这个是一个估计值.

十、Extra: 包含不适合在其他列中显示但十分重要的额外信息。

Only index,这意味着信息只用索引树中的信息检索出的,这比扫描整个表要快。

Using index:使用索引扫描。

using where:使用where限制,表示MySQL服务器在存储引擎受到记录后进行“后过滤”(Post-filter),如果查询未能使用索引,Using where的作用只是提醒我们MySQL将用where子句来过滤结果集。

Using filesort: MySQL中无法利用索引完成的排序操作称为“文件排序”。它跟文件没有任何关系,实际上是内部的一个快速排序。

Using temporary:MySQL需要使用临时表来存储结果集,常见于排序和分组查询。使用filesort和temporary的话会很吃力,WHERE和ORDER BY的索引经常无法兼顾,如果按照WHERE来确定索引,那么在ORDER BY时,就必然会引起Using filesort,这就要看是先过滤再排序划算,还是先排序再过滤划算。

impossible where: 表示用不着where,一般就是没查出来啥。

Using join buffer:改值强调了在获取连接条件时没有使用索引,并且需要连接缓冲区来存储中间结果。如果出现了这个值,那应该注意,根据查询的具体情况可能需要添加索引来改进能。

求一键三连:点赞转发在看

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码农编程进阶笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
MySQL Explain执行计划输出字段解读
select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。
Power
2025/03/01
1580
MySQL执行计划解读
id如果相同,可以认为是一组,从上往下顺序执行;在所有组中,id值越大,优先级越高,越先执行
流柯
2018/08/30
1.5K0
MySQL执行计划解读
说烂嘴了的Explain执行计划,你不一定讲得清楚
使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。
用户4283147
2022/10/27
6520
说烂嘴了的Explain执行计划,你不一定讲得清楚
【mysql系列】细谈explain执行计划之“谜”
我们先了解一下explain语法和相关理论知识。 语法: EXPLAIN SELECT select_options;
沁溪源
2020/10/28
9820
【mysql系列】细谈explain执行计划之“谜”
MySQL EXPLAIN执行计划详解
调用EXPLAIN可以获取关于查询执行计划的信息,以及如何解释输出。EXPLAIN命令是查看查询优化器如何决定执行查询的主要方法,但该动能也有局限性,它的选择并不总是最优的,展示的也并不一定是真相。
全栈程序员站长
2022/11/02
1.9K0
MySQL 执行计划深入解读
使用 EXPLAIN 关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是 如何处理你的SQL语句的,分析你的查询语句或是表结构的性能瓶颈。
没有故事的陈师傅
2021/11/15
6990
MySQL 执行计划深入解读
MySQL数据库:explain执行计划详解
执行计划是SQL语句经过查询分析器后得到的 抽象语法树 和 相关表的统计信息 作出的一个查询方案,这个方案是由查询优化器自动分析产生的。由于是动态数据采样统计分析出来的结果,所以可能会存在分析错误的情况,也就是存在执行计划并不是最优的情况。
全栈程序员站长
2022/06/29
1.3K0
MySQL数据库:explain执行计划详解
Mysql执行计划(大章)
使用explain关键字可以模拟优化器执行SQL查询语句,从而知道Mysql是如何处理你的SQL语句的。分析你的查询语句或者表结构的性能瓶颈
彼岸舞
2020/09/30
7870
MySQL Explain关键字
使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理你的 SQL 语句的。分析你的查询语句或是表结构的性能瓶颈。
万能青年
2019/09/17
1.8K0
MySQL Explain关键字
详解Mysql执行计划explain
MySql提供了EXPLAIN语法用来进行查询分析,在SQL语句前加一个”EXPLAIN”即可。
chenchenchen
2020/05/27
1K0
(4) MySQL中EXPLAIN执行计划分析
可以看到上面的执行计划返回了3行结果,id列的值可以看作是SQL中所具有的SELECT操作的序号 由于上述SQL中只有一个SELECT,所以id全为1,因此,我们就要按照由上至下读取执行计划 按照我们的SQL语句,我们会认为执行顺序是a,b,c,但是通过上图可以发现,Mysql并不是完成按照SQL中所写的顺序来进行表的关联操作的 执行对表的执行顺序为a,c,b,这是由于MySQL优化器会根据表中的索引的统计信息来调整表关联的实际顺序
用户1214487
2022/03/26
9930
(4) MySQL中EXPLAIN执行计划分析
性能优化-通过explain查询分析SQL的执行计划
SQL的执行计划侧面反映出了SQL的执行效率,具体执行方式如下所示:在执行的SQL前面加上explain关键词即可;
cwl_java
2020/02/13
1.5K0
带你看懂MySQL执行计划
前面文章,我们学习了 MySQL 慢日志相关内容,当我们筛选得到具体的慢 SQL 后,就要想办法去优化啦。优化 SQL 的第一步应该是读懂 SQL 的执行计划。本篇文章,我们一起来学习下 MySQL explain 执行计划相关知识。
MySQL技术
2021/07/05
1.7K0
Explain 执行计划 和 SQL优化
在分析查询性能时,考虑EXPLAIN关键字同样很管用。EXPLAIN关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。explain 可以帮助我们分析 select 语句,让我们知道查询效率低下的原因,从而改进我们查询,让查询优化器能够更好的工作,可以帮助选择更好的索引和写出更优化的查询语句。
星哥玩云
2022/08/17
7380
Explain 执行计划 和 SQL优化
Mysql中explain命令查看执行计划
使用explain命令可以查看一条查询语句的执行计划,这篇文章记录一下查询计划的各个属性的值极其含义.
呼延十
2019/07/01
2.1K0
Mysql中explain命令查看执行计划
MySQL性能优化(七):MySQL执行计划,真的很重要,来一起学习吧
一条SQL被一个懵懂的少年,一阵蹂躏,扔向了MySQL服务器的尽头,少年苦苦等待,却迟迟等不来那满载而归的硕果。于是少年气愤,费尽苦心想从度娘那边寻求帮助,面对执行计划EXPLAIN,却等来的是无尽的折磨与抓狂。
xcbeyond
2020/05/14
5.6K0
MySQL优化之Explain命令解读
  explain为MySQL提供语句的执行计划信息。可以应用在select、delete、insert、update和place语句上。explain的执行计划,只是作为语句执行过程的一个参考,实际执行的过程不一定和计划完全一致,但是执行计划中透露出的讯息却可以帮助选择更好的索引和写出更优化的查询语句。
星哥玩云
2022/08/17
9090
SQL 语句分析 -explain 执行计划详解
实际生产环境中,为了知道SQL语句的执行过程具体,我们可以使用explain + SQL语句来查看。
技能锦囊
2020/05/26
1.4K0
【MySQL】MySQL Explain性能调优详解
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。
终有救赎
2023/12/14
3200
【MySQL】MySQL Explain性能调优详解
mysql explain ref列_MySQL EXPLAIN详解
MySQL EXPLAIN详解:http://www.jianshu.com/p/ea3fc71fdc45
全栈程序员站长
2022/11/02
4.2K0
相关推荐
MySQL Explain执行计划输出字段解读
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验