MySQL认知__explain简介(上)

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

EXPLAIN的基本介绍

 关于MySQL的优化,我们首先要了解explain这个东西。explain能够帮助我们来查看我们所写的SQL的内部执行计划,包括是否使用索引、有没有做全表扫描等等,让我们能更好地了解自己编写的SQL。
 
 我们深入了解MySQL的基于开销的优化器,可以获得很多可能被优化器考虑到的访问策略的细节,以及当我们编写的SQL在何种情况下不会被优化器所采用。

1. explain的用法

 explain的用法:在我们要查询的SQL之前加上该关键字,注意要是查询SQL。

 用法如下所示:

EXPLAIN 
	SELECT * FROM iot_product_discount pd 
	WHERE pd.`id` = "7b8bab6e4d6c4e6ba4bfcac40349ca33";

explain语句结果

2. id

  • id相同时,执行顺序由上到下。
  • 如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行。
  • id如果相同,可以认为是一组,从上往下顺序执行。在所有组中,id值越大,优先级越高。

3.select_type

值解释
SIMPLE简单SELECT,不使用UNION或子查询等
PRIMARY查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY
UNIONunion语句的第二个或者说是后面的SELECT语句
DEPENDDENT UNIONUNION中的第二个或者后面的select语句,取决于外面的查询
UNION RESULTUNION的结果
SUBQUERY子查询中的第一个SELECT
DEPENDENT SUBQUERY子查询中的第一个select,取决于外面的查询
DERIVED派生类的SELECT, FROM子句的子查询
UNCACHEABLE SUBQUERY一个子查询的结果不能被缓存,必须重新评估外链接的第一行
  • PRIMARY
    primary类型图
     PRIMARY的解释为:查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY。我们能够看到最id=1的那一行是属于PRIMARY,是查询middle表。
  • UNION
    union类型图
     PRIMARY的解释为:union语句的第二个或者说是后面的SELECT语句。我们能够看到我们后面连接的一个select表即p2表select_type属性为UNION。

4.table
 该字段显而易见就是哪张表的,有时候不是真实的表名字,有时候是看到的是derivedX(X是个数字,为第几步执行的结果)。

5.type
 type是我们在MySQL中找表所需的方式,又称"访问类型"。
常用类型从好到差有:
 NULL、system、const、eq_ref、ref、range、index、ALL。

  • NULL
     MySQL在优化过程中分解语句,执行时甚至不用访问表或索引,例如:从一个索引列里选取最小值可以通过单独索引查找完成。
  • system
     system这是const类型的特列,当查询的表只有一行的情况下,才会出现。平时不会出现,这个也可以忽略不计。
  • const
     表最多有一个匹配行,const用于比较primary key 或者 unique索引。因为值匹配一行数据,所以很快。记住一定是用到primary key 或 unique,并且值检索两条数据的情况下才会是const。

比较图-1
 虽然只搜索到一条数据,但是因为没有用到指定的索引,所以不会类型不会是const。

比较图-2

  这边查到的也是一条数据,但是是使用id主键来检索,所以执行的访问类型为const,可以理解const是最优化的。

  • eq_ref
     对于eq_ref的解释,MySQL手册是这样说的:对于每个来自前面的表的组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联接使用并且索引是 unique 或者 primary key。eq_ref可以用于使用=比较带索引的列。
    eq_red类型
     我们能够看到f表是通过eq_ref来索引的。
    非eq_ref类型
     相同的两张表,我们只是将其相等的字段进行了替换,我们可以发现因为p.discount 不是索引或主键,所以这时候type就变成了ALL,非eq_ref。

  • ref
     ref对于每个来自前面的表的行组合,所有有匹配的索引值都将从这张表中读取。如果联接只使用键的最左边的前缀,或如果键不是unique或primary key(换句话说,如果联接不能基于选择单个行的话),则使用ref。如果使用的键仅仅匹配少量行,该联接类型还是不错的。

  • index_merge
     该联接类型表示使用了索引合并优化方法。在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。

  • range
     给定范围内的检索,使用一个索引来检查行。
    ALL的类型图
    如上图所示,因为p.flow_product_id 既不是索引也不是主键,所以这边显示的type为ALL。

range类型图
如上图所示,因为p.id 是主键,所以这边显示的type为range。

  • index
     该联接类型与ALL相同,除了只有索引树被扫描。这通常比ALL快,因为索引文件通常比数据文件小。(也就是说虽然all和index都是读全表,但是index是从索引中读取,而all是从硬盘中读取的)
  • ALL
     对于每个来自先前的表的行组合,进行完整的表扫描。如果表是第一个没标记const的表,这通常不太好,而且在通常在它的情况下很差。通过可以增加更多的索引而不要使用ALL,使得行能基于前面的表中的常数值或列值被检索出来。

 剩下的属性将在第二篇中介绍

MySQL的EXPLAIN用法 引言:在处理大量数据的情况下,优化查询语句的性能是至关重要的。为了帮助开发人员优化查询,MySQL提供了一个非常有用的工具,即EXPLAIN。EXPLAIN是MySQL用于分析查询语句执行计划的命令。通过分析查询语句的执行计划,开发人员可以了解到查询是如何被MySQL引擎处理的,可以发现查询语句的性能瓶颈,进而进行优化。一、EXPLAIN语法其中,table_name是查询的表名,condition是查询的条件。需要注意的是,EXPLAIN只能用于SELECT查询语句。 阅读详情

相关推荐

microduck复刻实战:强化学习机器人从仿真训练到真机部署全攻略

强化学习是智能体通过与环境交互试错来学习最优策略的机器学习范式,在机器人控制领域,常借助物理仿真环境进行策略训练,以降低真实世界的试错成本。其核心原理是通过奖励信号引导策略网络迭代优化,PPO等算法则在稳定性和样本效率之间取得平衡。仿真训练的价值在于可批量验证控制策略,但仿真与真实硬件之间存在物理参数偏差,需通过域随机化等技术实现迁移。从四足机器人到仿生机器人,这类方案广泛应用于复杂运动控制任务。microduck作为一个典型的强化学习机器人项目,其复刻过程涉及环境搭建、奖励设计、PPO调参及Sim-to-

weixin_29061425的博客 361

explain简介

explain简介

Learning_foolish的博客 278

关于AD中如何绘制原理图及其封装

AD中如何绘制原理图及其封装 题记:这是一个比较基础的知识,之所以我打算写一篇这样的笔记,主要是因为在日常生活中,我极少绘制特殊模块或芯片原理图及其封装。久而久之就忘记咋画了,有时需要画封装的时候又想不起来,网上的资料虽然一堆堆的,但往往只是仅原理图的绘制,或者是仅封装的绘制。为此我写一篇这样的笔记,记录绘制原理图及其封装的一条龙服务,感觉这对我而言尤为重要。 本文分为三大板块,依次是原理图的绘制、封装的绘制、二者的联立 第一板块——原理图的绘制 原理图的建立 第二板块——封装的绘制 第三板块——二者的

weixin_51130221的博客 7万+

MYSQL之SQL优化一

背景 创建字段和索引都是一样的test1和test2表。 id主键、age普通索引、id_card唯一索引、name无索引。 执行计划 通过explain可以查看sql的索引命中情况。 因为即使where条件包含了索引,也不一定会命中索引。因此我们假设where条件总是能命中索引。 type type有以下几个值,性能而言,可以认为system>const>eq_ref>ref>range>index>ALL。 System:指系统表的查询,仅有一行的记录。,一般用不到

qq_36180997的博客 4265

2026华为OD机考双机位C卷++ 双机位B卷 + 双机位A卷 + 2025C/B/A卷+ 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

2025华为OD机考双机位C卷++ 双机位B卷 + 双机位A卷 + 2025C/B/A卷+ 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

算法大师! 5万+

微信小程序 - 实现身份证OCR识别人像面与国徽面并提取字段信息,详解从手机相册选取或打开摄像头拍照上传身份证正反面图片ocr文字识别数据填充表单(提供免费纯前端ocr识别插件+百度OCR识别API)

微信小程序身份证识别,微信小程序身份证拍照、上传并OCR识别,微信小程序实现OCR扫描识别,微信小程序识别身份证免费插件,微信小程序实现身份证识别功能。ocr识别插件。微信身份证拍照后进行ocr识别,微信小程序OCR扫描识别身份证,OCR身份证实名认证+图片上传+拍照上传图片,微信小程序之身份证照片正反上传,小程序OCR身份证识别,微信小程序实现文字识别-ocr插件,微信小程序利用百度AI实现扫描身份证获取信息功能,基于微信小程序OCR插件实现身份证拍照、上传并OCR识别的示例demo,将上传的照片传到服务

🏆 前端领域优质创作者 8133

sql优化总结

优化大纲 通过explane 语句帮助选择更好的索引和写出更优化的查询语句。 SQL语句中的IN包含的值不应该过多。 当只需要一条数据的时候,使用limit 1。 如果限制条件中其他字段没有索引,尽量少用or。 尽量用union all代替union。 不使用ORDER BY RAND()。\ 区分in和exists、not in和not exists。 使用合理的分页方式以提高分页的效率。 查...

weixin_45156610的博客 760

vue3:html2canvas+jspdf将页面以A4导出为PDF文件,解决内容截断+在分页处截断问题详细排查和解决教程(jsPDF + html2canvas A4分页截断、内容分页时存在截断)

html2canvas + jsPDF 解决内容截断问题,vue3 jspdf-html2canvas生成多页pdf防截断处理(包含代码),vue3解决html2canvas + jsPDF导出pdf分页内容截断问题,jsPDF + html2canvas A4分页截断 完美解决方案(含代码 + 案例),html页面导出pdf截断问题,html2canvas 与 jspdf 相结合生成 pdf 内容被截断的终极解决方案,提供html2canvas+jsPDF将HTML页面以A4纸方式导出为PDF后,内容分页

✅ 精选推荐文章 2244

mysql索引访问方式实践 (const、ref、range、index、all、index merge)

如果你对mysql索引访问方式还一知半解,请继续看下去,相信本文会对你有帮助: 本文会讲解: mysql索引的实现方式 mysql有哪些索引访问方式 mysql索引的实现方式 Mysql索引的数据结构采用的是B+树,B+树是一棵多路搜索树。类似这样。 在Innodb存储引擎中,又可分为聚簇索引(主键索引)与非聚簇索引,聚簇索引的非叶子结点记录的是索引,叶子结点记录了对应的数据行。 非聚簇索引与聚簇索引不一样的是,它的叶子结点记录的是普通索引列与主键的对应关系。 而在Myisam存储引擎中,就全是非聚簇

疯狂的蜗牛 2万+

基于深度学习的文字识别与检测算法研究

基于深度学习的文字识别与检测算法研究 1. 背景介绍 1.1 文字识别与检测的重要性 在当今信息时代,文字作为人类交流和传递信息的主要载体,无处不在。从日常生活中的路牌、广告牌,到办公场所的文件、合同,再到互联网上的网页、图片等

AI天才研究院 1043

非洲秃鹫优化算法(AVOA)详解:从原理到实战

非洲秃鹫优化算法(AVOA)是一种模拟秃鹫觅食行为的元启发式算法。该算法通过数学建模秃鹫的群体分工、饥饿感知和食物竞争等行为,将优化问题转化为智能觅食过程。AVOA包含四个关键阶段:(1)种群初始化与最佳秃鹫选择;(2)饥饿率控制探索与开发平衡;(3)探索阶段模拟远距离飞行搜索;(4)开发阶段模拟食物源附近的竞争行为。算法采用饥饿率函数实现自适应搜索,初期偏向全局探索,后期转向局部开发。实验表明AVOA在标准测试函数和工程设计问题上表现出优越性能,其创新性在于将秃鹫独特的生物学特性转化为高效的优化机制。

qq_42212808的博客 228

MySQL索引

一、如何判断数据库索引是否生效 使用explain分析语句如下: 可以看到,使用explain显示了很多列,各个关键字的含义如下: table:顾名思义,显示这一行的数据是关于哪张表的; type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为:const、eq_reg、ref、range、indexhe和ALL; possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从where语句中选择一个合适的语句; key: 实际使用的索

山高水长 557

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MySQL认知__explain简介(下)

EXPLAIN的基本介绍  关于MySQL的优化,我们首先要了解explain这个东西。explain能够帮助我们来查看我们所写的SQL的内部执行计划,包括是否使用索引、有没有做全表扫描等等,让我们能更好地了解自己编写的SQL。    我们深入了解MySQL的基于开销的优化器,可以获得很多可能被优化器考虑到的访问策略的细节,以及当我们编写的SQL在何种情况下不会被优化器所采用。 expl...

pseudonym_的博客 370

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

MySQL中EXPLAIN详解

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

wh柒八九的博客 5919

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

mysql 的explain

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

qq_39201004的博客 1762

【MySQL】之 Explain 命令简介

SQL 性能问题 SQL 语句执行时间长,效率低的原因可能有如下几条: 查询语句写的烂 索引失效(单值索引和复合索引的情况都有) 关联查询太多 join 服务器调优及各个参数设置(缓冲、线程等) SQL 执行顺序 由于 MySQL 会对 SQL 语句进行优化的原因,我们写的 SQL 语句和数据库引擎执行时的语句可能有所不能。比如我们写的 SQL 语句为: select distinct <select_list> from <left_table> <join_t

王廷云的博客 3106

mysql之EXPLAIN 详解

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

qq_43460315的博客 1846

mysql中EXPLAIN详解

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

qq_41534540的博客 1730

仅仅会用MySQL的EXPLAIN还不够,还需要会用EXPLAIN ANALYZE

在 MySQL 8.0.18 中,MySQL 引入了 EXPLAIN ANALYZE,一个在常规 EXPLAIN 查询计划工具之上的新功能。除了列出查询计划和估算的成本,EXPLAIN ANALYZE 还打印了执行计划中各个迭代器的实际成本。示例EXPLAIN ANALYZE语句:注意事项:EXPLAIN ANALYZE 实际上会运行查询,因此如果你不希望查询在实时数据库上运行,请不要使用 EXPLAIN ANALYZE。估算的执行成本(一些迭代器未被成本模型纳入,因此在估算中未包含它们)

程序新视界 1572

mysql EXPLAIN命令的输出列简介

mysql EXPLAIN命令的输出列简介

听海边涛声 1217

mysql explain简介

explain 介绍 使用EXPLAIN关键字可以模拟优化器执行SQL语句,分析你的查询语句或是结构的性能瓶颈 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询会返回执行计划的信息,但是不会执行这条sql语句 MySQL explain 语句及其详细输出信息介绍 官方文档https://dev.mysql.com/doc/refman/5.7/en/explain-output.html explain与show warnings联合使用 expl

qq_45617611的博客 561

mysql EXPLAIN详解

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

qq_35082497的博客 1243

如何看MySQL的EXPLAIN语句?

在 MySQL 中,EXPLAIN语句用于分析 SQL 查询的执行计划,通过查看执行计划,开发人员可以了解 MySQL 如何处理 SQL 语句,进而进行优化。使用EXPLAIN可以帮助你分析查询语句的性能瓶颈,尤其是在处理复杂查询时。下面详细介绍如何使用EXPLAIN语句及其结果的解释。

weixin_46072507的博客 1362

MySQL explain

(1) id(2) select_type(3) table(4) partitions(5) type(6) possible_keys(7) key(8) key_len(9) ref(10) rows(11) filtered(12) Extra步骤 1:访问 MySQL 官网(1) 如何判断查询是否使用了索引?

沟通反思总结 1316
上一篇: TCC分布式事务_样例讲解
下一篇: MySQL认知__explain简介(下)
pseudonym_
博客等级 码龄10年 88粉丝 205原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值