MYSQL explain执行计划解读

MYSQL explain执行计划解读

大家好,又见面了,我是全栈君。

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

优质文章第一时间送达!

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

                                 EXPLAIN SELECT * from user_info WHEREid = 1; 

MYSQL explain执行计划解读

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显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:

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

MYSQL explain执行计划解读

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112004.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • “Word在试图打开文件时遇到错误。请尝试下列方法:* 检查文档或驱动器的文件权限。* 确保有足够的内存和磁盘空间。* 用文件恢复转换器打开文件。”问题!…[通俗易懂]

    “Word在试图打开文件时遇到错误。请尝试下列方法:* 检查文档或驱动器的文件权限。* 确保有足够的内存和磁盘空间。* 用文件恢复转换器打开文件。”问题!…[通俗易懂]Word在试图打开文件时遇到错误。请尝试下列方法:*检查文档或驱动器的文件权限。*确保有足够的内存和磁盘空间。*用文件恢复转换器打开文件。如下图:让同事在他们自己电脑上,都是可以打开的,就我的电脑不能打开,网上搜索了一系列方法,如改后缀名、用word工具修复、下载office补丁安装都不能解决。后面无意中找到的解决方法,与有类似经历…

  • API接口签名验证

    API接口签名验证

    2021年10月13日
  • RabbitMQ Network Partitions 处理策略[通俗易懂]

    RabbitMQ Network Partitions 处理策略[通俗易懂]网络分区的意义RabbitMQ的模型类似交换机模型,且采用erlang这种电信网络方面的专用语言实现。RabbitMQ集群是不能跨LAN部署(如果要WAN部署需要采用专门的插件)的,也就是基于网络情况良好的前提下运行的。这种假设就好比paxos并不解决拜占庭问题。为什么RabbitMQ需要这种前提假设?这个它本身的数据一致性复制原理有关。RabbitMQ采用的镜像队列是一种环形的逻辑结构,…

  • pycharm安装pyqt5-tools_pycharm如何导入pygame模块

    pycharm安装pyqt5-tools_pycharm如何导入pygame模块1.根据自己的系统和python版本下载安装,我用的是:PyQt5-5.6-gpl-Py3.5-Qt5.6.0-x32-2.exepython-3.5.4.exepycharm装的是激活成功教程版以上按次序依次安装,都按照默认路径安装即可。2.打开pycharm2.因为我用来写了一个串口

  • 麒麟系统安装打印机共享_银河麒麟 惠普打印机驱动怎么安装

    麒麟系统安装打印机共享_银河麒麟 惠普打印机驱动怎么安装银河麒麟惠普打印机驱动怎么安装相信很多小伙伴在日常办公中都会用到打印机,如果我们想要在电脑中安装打印驱动该怎么做呢?方法很简单,下面小编就来为大家介绍具体如下:1.首先,在电脑中下载打印机相对应的驱动程序,在打印机对应品牌的官网中都能下载。2.接着,打开桌面左下角的开始菜单,在弹出菜单中找到并点击“设备和打印机”。3.打开下图所示窗口后,右键任意空白处,在弹出菜单中点击“添加打印机”。4….

  • 如何学习FPGA「建议收藏」

    如何学习FPGA「建议收藏」PS:笔者强烈建议诸位注册一个EETOP的账号,每天签到或者发贴、回贴就有积分了,里面的资源非常丰富,各种软件、资料都能找到。一、入门首先要掌握HDL(HDL=verilog+VHDL)。第一句话是:还没学数电的先学数电。然后你可以选择verilog或者VHDL,有C语言基础的,建议选择VHDL。因为verilog太像C了,很容易混淆,最后你会发现,你花了大量时间…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号