当前位置:首页 > 文章列表 > 数据库 > MySQL > 如何使用MySQL的explain命令进行性能分析

如何使用MySQL的explain命令进行性能分析

来源:亿速云 2023-04-25 08:25:58 0浏览 收藏

数据库不知道大家是否熟悉?今天我将给大家介绍《如何使用MySQL的explain命令进行性能分析》,这篇文章主要会讲到等等知识点,如果你在看完本篇文章后,有更好的建议或者发现哪里有问题,希望大家都能积极评论指出,谢谢!希望我们能一起加油进步!

如何使用MySQL的explain命令进行性能分析

一、explain能干什么

  通过explain语句,我们可以分析出以下结果

表的读取顺序数据读取操作的操作类型
表之间的引用哪些索引可以使用
每张表有多少行被优化器查询哪些索引被实际使用

二、如何使用explain

  用法:explain + SQL 语句;

MariaDB [class_info]> explain select * from student;
+--+-----------+-------+----+-------------+-----+-------+-----+----+-----+
|id|select_type| table |type|possible_keys| key |key_len| ref |rows|Extra|
+--+-----------+-------+----+-------------+-----+-------+-----+----+-----+
| 1|   SIMPLE  |student| ALL|     NULL    | NULL| NULL  | NULL|  1 |     |
+--+-----------+-------+----+-------------+-----+-------+-----+----+-----+
1 row in set (0.00 sec)

  expain出来10个字段,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra

  概要描述:

字段描述
id选择标识符
select_type查询的类型
table输出结果集的表
type表的连接类型
possible_keys查询时可能使用的索引
key实际使用的索引
key_len索引字段的长度
ref列与索引的比较
rows扫描出的行数(估算的行数)
Extra执行情况的描述和说明

三、explain各字段的含义

3.1 id

  id是select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。id的结果有以下三种情况:

  ● id 相同,执行顺序由上至下,与sql中顺序无关

如何使用MySQL的explain命令进行性能分析

  ● 如果是子查询,id的序号会递增,id越大优先级越高,越先被执行

如何使用MySQL的explain命令进行性能分析

  ● id 如果相同,可以认为是一组,从上往下顺序执行;在所有组中id值越大,优先级越高,越先执行。

如何使用MySQL的explain命令进行性能分析


3.2 select_type

  select_type显示示查询中每个select子句的类型,常用的select_type的类型有simple、primary、subquery、derived、union、union result

  (1) simple (简单select,不使用union或子查询等任何复杂查询)

如何使用MySQL的explain命令进行性能分析

  (2) primary (子查询中最外层查询,查询中若包含任何复杂的子部分,最外层的select被标记为primary)

如何使用MySQL的explain命令进行性能分析

  (3) subquery (在select或where列表中包含了子查询)

  (4) derived (在from列表中包含的子查询被标记为derived(衍生),MySQL会递归执行这些子查询,把结果放在临时表中)

  (5) union (union中的第二个或后面的select语句)

如何使用MySQL的explain命令进行性能分析

  (6) union result (union的结果,union语句中第二个select开始后面所有select)

如何使用MySQL的explain命令进行性能分析


3.3 table

  table显示这一步所访问数据库中表名称 (显示这一行的数据是关于哪张表的)。


3.4 type

  type所显示的是查询使用了哪种类型,type包含的类型有all、index、range、ref、eq_ref、const、system、NULL,它的性能依次递增。

  ● all :Full Table Scan, MySQL将遍历全表以找到匹配的行

如何使用MySQL的explain命令进行性能分析

  ● index : Full Index Scan,index与ALL区别为index类型只遍历索引树

如何使用MySQL的explain命令进行性能分析

  ● range:只检索给定范围的行,使用一个索引来选择行

如何使用MySQL的explain命令进行性能分析

  ● ref: 表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

如何使用MySQL的explain命令进行性能分析

  ● eq_ref : 类似ref,区别就在使用的索引是唯一索引,对于每个索引键值,表中只有一条记录匹配,简单来说,就是多表连接中使用primary key或者 unique key作为关联条件

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

如何使用MySQL的explain命令进行性能分析

  ● NULL : MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。


3.5 possible_keys

  possible_keys显示可能应用在这张表中的索引,一个或多个。查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用。(该查询可以利用的索引,如果没有任何索引显示 null)


3.6 key

  key显示MySQL实际决定使用的键(索引),必然包含在possible_keys中。如果没有选择索引,则是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用force indexuse index 或者 ignore index


3.7 key_len

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

如何使用MySQL的explain命令进行性能分析


3.8 ref

  ref显示索引的那一列被使用,表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值

如何使用MySQL的explain命令进行性能分析


3.9 rows

  rows估算出结果集的行数,表示MySQL根据表统计信息及索引选用情况,估算的找到所需的记录所需要读取的行数。

如何使用MySQL的explain命令进行性能分析


3.10 Extra

  Extra该列包含MySQL解决查询的详细信息,有以下几种情况:

  的请求列都是同一个索引的部分的时候,表示mysql服务器将在存储引擎检索行后再进行过滤

  ● Using temporary表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询,常见 group by ; order by

  ● Using filesort当Query中包含 order by 操作,而且无法利用索引完成的排序操作称为“文件排序”

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

  ● Impossible where 这个值强调了where语句会导致没有符合条件的行(通过收集统计信息不可能存在结果)。

  ● Select tables optimized away 这个值意味着仅通过使用索引,优化器可能仅从聚合函数结果中返回一行

  ● No tables used Query语句中使用from dual 或不含任何from子句

今天关于《如何使用MySQL的explain命令进行性能分析》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

版本声明
本文转载于:亿速云 如有侵犯,请联系study_golang@163.com删除
提升聊天效率的神器:浏览器插件Monica无敌了!提升聊天效率的神器:浏览器插件Monica无敌了!
上一篇
提升聊天效率的神器:浏览器插件Monica无敌了!
如何在 Windows 11 build 25227 中打开开始菜单图标?
下一篇
如何在 Windows 11 build 25227 中打开开始菜单图标?
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    511次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    498次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 千音漫语:智能声音创作助手,AI配音、音视频翻译一站搞定!
    千音漫语
    千音漫语,北京熠声科技倾力打造的智能声音创作助手,提供AI配音、音视频翻译、语音识别、声音克隆等强大功能,助力有声书制作、视频创作、教育培训等领域,官网:https://qianyin123.com
    169次使用
  • MiniWork:智能高效AI工具平台,一站式工作学习效率解决方案
    MiniWork
    MiniWork是一款智能高效的AI工具平台,专为提升工作与学习效率而设计。整合文本处理、图像生成、营销策划及运营管理等多元AI工具,提供精准智能解决方案,让复杂工作简单高效。
    169次使用
  • NoCode (nocode.cn):零代码构建应用、网站、管理系统,降低开发门槛
    NoCode
    NoCode (nocode.cn)是领先的无代码开发平台,通过拖放、AI对话等简单操作,助您快速创建各类应用、网站与管理系统。无需编程知识,轻松实现个人生活、商业经营、企业管理多场景需求,大幅降低开发门槛,高效低成本。
    172次使用
  • 达医智影:阿里巴巴达摩院医疗AI影像早筛平台,CT一扫多筛癌症急慢病
    达医智影
    达医智影,阿里巴巴达摩院医疗AI创新力作。全球率先利用平扫CT实现“一扫多筛”,仅一次CT扫描即可高效识别多种癌症、急症及慢病,为疾病早期发现提供智能、精准的AI影像早筛解决方案。
    176次使用
  • 智慧芽Eureka:更懂技术创新的AI Agent平台,助力研发效率飞跃
    智慧芽Eureka
    智慧芽Eureka,专为技术创新打造的AI Agent平台。深度理解专利、研发、生物医药、材料、科创等复杂场景,通过专家级AI Agent精准执行任务,智能化工作流解放70%生产力,让您专注核心创新。
    188次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码