MySQL EXPLAIN详解

MySQL EXPLAIN 详解 EXPLAIN 是 MySQL 提供的性能分析工具,用于查看 SQL 查询的执行计划(即优化器如何执行查询)。它通过模拟查询过程(不实际执行 SQL)返回一个表格,展示索引使用、表连接方式、扫描行数等关键信息,帮助开发者诊断性能瓶颈并优化查询。核心作用:基本语法: FORMAT:指定输出格式,默认是表格形式(TRADITIONAL),JSON 格式包含更详细信息。 示例: 输出结果示例:性能瓶颈难以定位索引优化盲目性资源浪费与扩展性问题维护成本高必用 EXPLAIN 的场景:快速优化步骤:通过 EXPL 阅读详情

MySQL Explain 是什么

使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。

分析功能

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

使用

EXPALIN + SQL 语句
执行所包含的信息:

 id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra

下面分别解释字段
id: select的查询的序列号,包含一组数字,表示查询中执行select子句或操作部的顺序
表示情况有三种:

  • id相同,执行顺序由上至下
  • id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
  • id有相同也有不同,数值大的先执行,相同的由上至下执行

select_type: 表示SELECT语句的类型,分别有:

  • SIMPLE:简单的select查询,查询中不包含子查询或UNION
  • PRIMARY:表示主查询。或者是最外层的查询语句
  • SUBQUERY:在SELECT 或WHERE列表中包含了子查询
  • DEPENDENT SUBQUERY: 子查询中的第一个SELECT语句
  • DERIVED:在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表里。
  • UNION:若第二个SELECT出现UNION之后,则被标记为UNION;若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED
  • UNION RESULT::连接查询的结果

table: 表示查询的表

type: 显示查询使用了何种类型:
常见的最好到最差依次是:system>const>eq_ref>ref>range>index>All
分别表示:

  • system :表只有一行记录(等于系统表),这是const类型的特例,平时不会出现,可以忽略不计
  • const :表示通过索引一次就找到了,const用于比较primary key或者unique索引。因为只匹配一行数据,所以很快,如将主键置于where列表中,MySQL就能将该查询转换为一个常量。
  • eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一性扫描
  • ref :非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而它可能会找到多个符合条件的行,所有它应该属于查找和扫描的混合体
  • range:只检索给定范围的行,使用一个索引来选择行.key列显示使用了哪个索引一般就是在你的where语句中出现了between、<、>、in等的查询这种范围扫描索引扫描比全表扫描要好,因为它只需要开始于索引的某一点,而结束于另一点,不用扫描全部索引。
  • index:Full Index Scan,Index与All区别为index类型只遍历索引树。这通常比ALL快,因为索引文件通常比数据文件小。(也就是说index和All都是读全表,但index是从索引中读取的,而All是从硬盘中读的) 例: explain select id from t1;
  • all:Full Index Scan 将遍历全表以找到匹配的行

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

possible_keys: 显示可能应用在这张表中的索引,一个或多个。查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用

key: 实际使用的索引。如果为NULL,则没有使用索引,查询中若使用了覆盖索引,则该索引仅出现在key列表中

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

ref: 显示索引的哪一列被使用了,如果可能的话,是一个常数。哪些列或常量被用于 查找索引列上的值。

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

Extra: 包含不适合在其他列中显示但十分重要的额外信息
会出现一些属性:

  • Using filesort :说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作称为”文件排序”.(重要)
  • Using temporary :使用了临时表保存中间结果,MySQL在对查询结果排序时使用了临时表。常见于排序order by 和分组查询group by(重要)
  • Using index :表示相应的select操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错!如果同时出现using where,表明索引被用来执行索引键值的查找;如果没有同时出现using where,表明索引用来读取数据而非执行查找动作
    索引覆盖: 就是SELECT的数据只从索引中就能够取得,不必读取数据行,MySQL可以利用索引返回select列表中的字段,而不必根据索引再次读取数据文件,换句话说查询列要被所建的索引覆盖。(重要)

  • Using where:表明使用了where过滤

  • Using join buffer:使用了连接缓存
  • impossible where :where子句的值总是false,不能用来获取任何元组
  • select table optimized away:在没有GROUP BY子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。
  • distinct:优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作
MySQL中的EXPLAIN的详解 explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。– 表的读取顺序– 数据读取操作的操作类型– 哪些索引可以使用– 哪些索引被实际使用– 表之间的引用– 每张表有多少行被优化器查询EXPLAIN 或者 DESC命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。版本情况。 阅读详情

相关推荐

一文说清楚 MySQL 的 explain

explain 是 MySQL 提供的一个用于分析查询语句执行计划的工具。它不会实际执行查询语句,而是返回 MySQL 执行该查询的详细计划,包括如何连接表、使用什么索引、扫描多少行数据等信息。通过这些信息,开发者可以了解查询语句的执行过程,判断索引是否被有效使用,从而有针对性地进行优化。explain 在 MySQL 查询优化中具有重要的作用,它能帮助我们深入了解查询语句的执行计划,发现性能瓶颈。

LBJ_2016_1984_12_30 931

MySQL-Explain详解

MySQL-Explain详解

fsdfkjai的博客 7万+

【技术拆解】Illumina边合成边测序(SBS)核心流程全解析 | 从文库构建到数据分析

本文深入解析了Illumina边合成边测序(SBS)技术的完整流程。从DNA样本的文库构建(片段化、加接头、扩增),到Flowcell上的簇生成(桥式PCR),再到核心的边合成边测序(SBS)循环(荧光标记、可逆终止),最后简述了从原始数据到生物学洞见的数据分析步骤,为理解这一主流高通量测序技术提供了清晰的框架。

weixin_29201859的博客 540

Explain详解与索引最佳实践

Explain工具介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,而不是 执行这条SQL 注意:如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中 Explain分析示例 参考官方文档:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html 1 示例表: 2 D

weixin_39585051的博客 567

深信服技术认证“SCCA-C”划重点:信服云托管云

该认证包括云数据中心基础、云计算基础、云计算关键技术、云计算交付和运维体系、云计算技术商业应用、信服云托管云、深信服超融合HCI、深信服桌面云aDesk、深信服分布式存储EDS、深信服应用交付AD。学习并获得SCCA-C认证后,可以具备深信服产品功能原理与实践,能够根据业务需求,协助完成云产品方案落地与实施;能够根据业务需求,完成深信服云产品的部署和管理的基本工作。为帮助大家更加系统化地学习云计算知识,高效通过云计算工程师认证,深信服特推出“SCCA-C认证备考秘笈”,共十期内容。

sangfor_edu的博客 615

Landsat 9 数据预处理第一步:在ENVI里正确加载影像的保姆级指南(含MTL文件处理)

本文详细介绍了Landsat 9数据在ENVI中的预处理流程,重点讲解了MTL文件的关键修改与正确加载方法,帮助遥感新手快速掌握数据加载技巧。通过辐射定标、大气校正等步骤,确保数据达到分析就绪状态,适用于土地覆盖分类等高级应用。

weixin_29201313的博客 208

MySQL高级知识(四)——Explain

  前言:explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。 注:本系列随笔如无特殊说明都MySQL版本都为5.7.22。 1.explain的作用 通过explain+sql语句可以知道如下内容: ①表的读取顺序。(对应id) ②数据读取操作的操作类型。(...

thedarkclouds的博客 3241

手把手教你用YOLOv5和OpenCV实现DNF全自动刷图(含自动拾取与Boss战逻辑)

本文详细介绍了如何使用YOLOv5和OpenCV构建DNF全自动刷图系统,包括环境配置、游戏画面采集、目标检测、场景导航及操作控制等核心模块。通过实战案例,帮助开发者掌握游戏自动化技术,实现自动拾取与Boss战逻辑,提升游戏效率。

weixin_42628941的博客 452

MySQL-explain详解说明

MySQL的explain使用字段说明

weixin_37799575的博客 4802

麒麟V10(arm)配置本地离线yum源

麒麟V10(arm)配置本地离线yum源

myfm2java的博客 7892

游戏大厂技术护城河——为什么你抄不了原神?

│ │ │ │ ↓ 通过 │ │ │ │。│ │ │ │ ↓ 成功 │ │ │ │。│ │ │ │ ↓ 完成 │ │ │ │。│ │ │ │ ↓ 达标 │ │ │ │。

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 71

sql server如何把四个子查询表的数据单独列一列出来_MySQL数据库下的Explain命令深度解析...

谢谢打开这篇文章的每个你关注我们 点击右上角···设为星标Explain是一个非常有的命令,可以用来获取关于查询执行计划的信息,以及如何解释输出。Explain命令是查看查询优化器如何决定执行查询的主要方法。这个功能有一定的局限性,并不总是会说出真相,但是它的输出是可以获取的最好信息,值得花时间了解,可以学习到查询是如何执行的。调用Explain要使用Explain,只需在查询中的s...

weixin_28864485的博客 464

基于Matlab使用雷达资源管理有效跟踪多个机动目标仿真(附源码)

多功能雷达可以搜索目标,确认新轨道,并重新访问轨道以更新状态。为了执行这些功能,多功能雷达通常由资源管理器管理,该资源管理器创建用于搜索、确认和跟踪的雷达任务。这些任务是根据优先级和时间安排的,因此,在每个时间步长中,多功能雷达都可以将其波束指向所需的方向。在此示例中,对于用于跟踪机动目标的雷达,有两个相互冲突的要求:目标的数量及其初始位置通常事先不知道。因此,雷达必须不断搜索感兴趣的区域才能找到目标。此外,雷达需要在进入雷达覆盖区域后立即检测并建立对每个目标的跟踪。目标机动的时间段事先是未知的。

珞瑜的博客 3150

MySQL中EXPLAIN详解

EXPLAIN作为MySQL的性能分析神器,读懂其结果是很有必要的,然而我在各种搜索引擎上竟然找不到特别完整的解读。都是只有重点,没有细节(例如type的取值不全、Extra缺乏完整的介绍等)。 文章目录 ...

wh柒八九的博客 5921

【Java面试题汇总】Spring篇(2026版)

IoC、DI、aop、事务、为什么不建议@Transactional、事务传播级别、@Autowired和@Resource注解的区别、BeanFactory和FactoryBean的区别、Bean的作用域,以及默认的作用域、Bean的生命周期、循环依赖、三级缓存、

种一棵树最好的时间是十年前,其次是现在 7376

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

mysql中EXPLAIN详解

大家好。众所周知,MySQL 查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,这个执行计划展示了接下来具体执行查询的方式。在日常工作过程中,我们可以使用EXPLAIN语句来查看某个查询语句的具体执行计划, 今天我们就来聊一聊EXPLAIN语句。如果我们想看看某个查询的执行计划的话,可以在具体的查询语句前边加一个EXPLAIN,就像这样:下面我们仔细聊一下每个列是干什么的。

qq_41534540的博客 1731

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

mysql之EXPLAIN 详解

EXPLAIN命令是 MySQL 查询优化的 “瑞士军刀”。熟练掌握EXPLAIN的输出字段含义,结合案例分析,能帮助我们深入理解 MySQL 执行计划,快速定位性能瓶颈,找到优化方案,构建高性能的 MySQL 应用。参考:https://relph1119.github.io/mysql-learning-notes/#/mysql ,推荐理解本文之后去看原书,原书有一定深度需前后贯穿仔细理解。

qq_43460315的博客 1846

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Mysql的Explain详解

Mysql的Explain详解1、什么是Explain?2、Explain的两个变种2.1、explain extended2.2、explain partitions3、explain展示出来的数据列详解3.1、id列3.2、select_type列3.2.1、simple---简单查询3.2.2、primary---复杂查询3.2.3、subquery---子查询3.2.4、derived---衍生查询3.2.5、union---联合查询3.3、table列3.4、type列3.4.1、const, s

qq_41931364的博客 5946

mysql EXPLAIN详解

使用EXPLAIN语句可以帮助你查看查询是否有效地利用了索引,通过理解执行计划,你可以优化查询,避免全表扫描,提高查询效率。如果查询没有使用索引或索引没有发挥预期作用,可能需要创建新的索引或调整现有索引。

qq_35082497的博客 1245

【MySQL01】【 Explain 命令详解】

最近在读《MySQL 是怎样运行的》一书,后续会随机将书中部分内容记录下来作为学习笔记,部分内容经过个人删改,因此可能存在错误,如想详细了解相关内容强烈推荐阅读该书。

猫吻鱼的博客 1329

一文了解MySQL explain详解

MySQL 的 EXPLAIN 是一个用于查询优化的关键字。它用于分析和评估查询语句的执行计划,帮助开发者理解查询语句的性能问题以及优化查询的方式。使用EXPLAIN关键字,可以获取关于查询执行计划的详细信息,包括表的访问顺序、连接方式、索引使用情况等,这些信息能够帮助你确定查询是否有效利用了索引,以及是否存在潜在的性能瓶颈。要使用EXPLAIN执行以上语句后,MySQL会返回一个结果集,包含了查询执行计划的详细信息。

时间如瑾 代码如诗 1641

MySQL Explain详解

最近慢慢接触MySQL,了解如何优化它也迫在眉睫了,话说工欲善其事,必先利其器。最近我就打算了解下几个优化MySQL中经常用到的工具。今天就简单介绍下EXPLAIN。 内容导航 idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra   环境准备 MySQL版本: 创建测试表 CREATE TABLE peo

hansam 的专栏 6856

【MySQL之Explain详解】

本文介绍了MySQL中EXPLAIN关键字的作用及返回字段含义。EXPLAIN用于分析SQL执行计划,帮助优化慢查询。重点解析了id(执行顺序)、select_type(查询类型)、table(访问表)、type(访问方式)等关键列

qq_40864151的博客 1769

mysql 的explain

就像书架上的书,你要找的内容可能需要翻阅很多本书,rows 就是 MySQL 估算需要翻阅的数量。行数越少,效率越高。书架上有多个索引卡片(possible_keys),key 是最终选中的卡片,告诉你用哪个索引来找书。假设书架的索引卡片按字母排序,ref 就是你在索引卡片上找的具体字母,比如“找姓氏以 A 开头的书”。想象你在书架上找一本书(查询数据),书架上有许多索引卡片(索引),possible_keys 就是。想象你是一名考古学家,在沙漠中寻找宝藏(数据查询),type 就是你选择的。

qq_39201004的博客 1764

MySQL:MySQL的EXPLAIN各字段含义详解

MySQL中的explain执行计划中的字段详解。

永远保持随时离开的技术能力! 2169
上一篇: SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
下一篇: flume入门 log4j 输出日志到flume
poorCoder_
博客等级 码龄10年 129粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值