MySQL(四) Explain分析器

Mysql(一)--EXPLAIN的参数解析及简单应用 Mysql逻辑架构 本篇博客的主题是explain查询分析器的使用,在写这个之前非常有必要了解一下mysql的查询分析器,才不至于,在后期了解完一些mysql优化原则后与一些结果产生歧义。 1.最上层不是mysql独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构,比如,连接处理,授权认证,安全等 2.第二层包括了mysql的许多核心功能,例如,查询解析,分析,... 阅读详情

4. Explain 分析器

1. explain + 查询语句

该EXPLAIN语句提供有关MySQL如何执行语句的信息。 EXPLAIN作品有 SELECT, DELETE, INSERT, REPLACE,和 UPDATE语句。

The EXPLAIN statement provides information about how MySQL executes statements. EXPLAIN works with SELECT, DELETE, INSERT, REPLACE, and UPDATE statements.

image-20200924182841286

image-20200924183042485

2. id 参数( 表的读取顺序 )

id为select 查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序。

id值存在三种情况:

  1. id相同,执行顺序由上至下。

    image-20200924185618760

    MySQL执行的顺序是 t1,t3,t2.

  2. id不同,如果是子查询,id序号会递增,id值越大,优先级越高,越先被执行

    image-20200924205247207

    MySQL执行的顺序是 t3 , t1 , t2.

  3. 如果同时存在id相同和不同的情况,那么id相同的会被认为是一组,从上到下的顺序执行;在所有组中,id值越大的,优先级越高,越先执行.

    image-20200924210927954

    MySQL执行的顺序是 t3, <derived2>, t2

3. select_type 参数

image-20200924211839360

  • SUBQUERY: 在select 或者 where 列表中包含子查询

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

  • UNION:若第二个 SELECT 出现在 UNION 之后,则标记为 UNION;若UNION包含在FROM子句的子查询中,外层SELECT将标记为 DERIVED。

  • UNION RESULT 从UNION表中获取的结果。

  • <union*M,N*>:该行指的是具有和id值的行 的 *M*并集 N。
  • <derived*N*>:该行是指用于与该行的派生表结果id的值 N。派生表可能来自(例如)FROM子句中的子查询 。
  • <subquery*N>:该行是指该行的物化子查询的结果,其id 值为N*。

4. type 参数

type参数为访问类型访问,其中包括这些内容 ,

image-20200926091159813

其中它们的查询性能由左到右,性能由差到好。表优化时,一般时百万级别的数据量才优化。 而一般情况下,我们==只需要优化到ref或者range==即可。

image-20200926091753027

  • System: 表中只有一行记录(等于系统表),这是 const 类型的特列,平时不会出现。
  • const: 表示通过索引一次就找到,const 用于比较 primary key 或者 unique 索引。因为只匹配一行数据,所以很快。 如将主键置于 where 列表中, MySQL就能将该查询转换为一个常量。

image-20200926093723716

首先我们得分析id值,id值越大得越先执行,当id值相同的话,则由上到下执行。所以先执行id值为2的语句,即先访问t1表, 因为 在select * from t1 where id = 1 中,id作为主键存在,通过索引即可找到,所以访问类型为 const。 而 id值为2的表时通过 子查询获得的,且子表中只有一行数据,所以type 查询类型为 system。

  • eq_ref: 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见于主键或者唯一索引扫描。
  • ref: 非唯一性索引扫描,返回匹配某个单独值得所有行,本质上也是一种索引访问,它返回所有匹配某个单独的行,然而,它可能会找到符合某个条件的行,所以他应该属于查找和扫描的混合体。

image-20200926103725919

在t1表中对 col1 和 col2 字段创建一个符合索引,

  • range: 只检索给定范围的行,使用一个索引来选择行,key 列显示使用哪个索引,一般就是在你的where 语句中出现 between、< 、 in 等查询语句。这种范围索引扫描比全表扫描要好,因为它只需要索引开始于某一点,结束于某一点,不同全表扫描。

  • index: index 与 All 的区别在于 index 类型只遍历 索引树。这通常比 All 要快,因为索引文件通常要比数据文件要小(也就是说all 和index 都是读全表,但 index 是从索引中读取的,而all是从硬盘中读取的。)

  • all: 将全表进行扫描

5. possible_key 和 key

  • possible_key: 显示可能应用在表中的索引,一个或者多个。查询涉及到的字段,若存在索引,则会被列出,但不一定在实际查询中使用
  • key: 实际使用的索引,如果为null,则没有使用索引。查询中若使用覆盖索引,则该索引仅出现在key列表中。

image-20200926115643255

如果建立索引,但在这并没使用,这就是索引失效。

当中存在三种情况: 1. 理论上需要使用,实际上使用;2. 理论上不使用,实际上使用;3. 理论上不使用,实际上也没使用。

6. key_len 参数

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

col1 和 col2 在 t1 表中是一对复合索引。

当查询条件只有一个时:

image-20200926142654466

当查询条件为两个时:

image-20200926142723885

7. ref 参数

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

实例一:

image-20200926143102157

分析: 因为id 相同,则从上到下开始执行, t1.other_colum=‘ ’,所以第一行的ref为 const。第二次执行的为 t1.id = t3.id 因为数据库会自适应,把它转换成 t3.id = t1.id, 所以扫描 t3 表时, 查询的是 test.t1.ID, 意思是 test数据库中的t1表中的ID字段。

示例二:

image-20200926150540613

分析:

首先查看id值,id值相同,从上到下开始执行。首先加载的是t2表,没有使用任何索引,并且进行全表扫描。

第2行时,扫描的是t1表,使用的索引是idx_col1_col2,关联的数据是 share数据库下的t2表中 的col1 字段 , 以及 一个常量即为“ac”。

8. rows 关键字

根据表统计信息及索引选用情况,大致估算找到所需记录所需读取的行数。该值越小越好。

示例1:

image-20200926153042221

建立索引之后,扫描的行数由641 减少到了 199 行, 大大提高了查找的效率。

MySQL分析器与优化器 >>>>分析器 由词法扫描器与语法分析器构成 词法扫描器 1、MySQL实现自己的词法扫描器 2、人工实现信息编排以便优化器获取信息,自动生成代码无法做到 3、实现上下文关联的token意义解析 4、关键字列表symbols[]在sql/sql_lex.h,功能名称列表sql_functions[]在sql/sql_lex.h 5、所有关键词表gen_lex_hash(sql/g 阅读详情

相关推荐

MySQL 单列索引与组合索引的区别介绍

组合索引的优点是它可以同时优化涉及到多个列的查询,提供更高效的数据访问。首先,组合索引的顺序非常重要。其次,组合索引的列数应该适度,过多的列可能会导致索引失效或性能下降。而组合索引适用于涉及到多个列的查询,能够提供更高效的数据访问。MySQL支持多种类型的索引,其中包括单列索引和组合索引。本文将详细介绍单列索引和组合索引的区别,并提供相应的源代码示例。然而,单列索引的缺点是它只能针对特定的列进行优化,而无法同时优化多个列的查询。通过创建组合索引,可以将多个列的值组合在一起,加快查询操作的速度。

PmtxPhp的博客 185

查询联合索引里单个字段会走联合索引吗?

背景 索引:IDX(b,c) sql select id where b = xx; select id where c = xx; 上面的两句sql会走b,c的联合索引吗? 答案是第一条会走,第二条不会 那多个字段的联合索引,使用部分字段会走索引吗? 例如 IDX(a,b,c) select id where b = xx and c = xx; 答案是不会 其实不管是多少个字段的联合索引,不管查询顺序,不管查询用到了几个字段 只要没有使用联合索引的第一个字段,则不会走联合索引 ...

weixin_44582716的博客 5364

MySQL查询分析器使用与性能优化实战工具

MySQL查询分析器是数据库开发者与运维人员不可或缺的核心工具之一,专注于SQL语句的编写、执行计划分析、性能调优及日志监控。其核心功能涵盖SQL语法解析、查询优化建议、执行效率评估等多个层面,帮助用户精准定位性能瓶颈并优化数据库操作。通过集成EXPLAIN执行计划分析、索引建议、慢查询追踪等机制,查询分析器为SQL语句的调试与优化提供了可视化、结构化的操作环境。掌握其基本原理与使用方法,不仅有助于提升数据库系统的运行效率,也为后续深入学习SQL优化与性能分析打下坚实基础。

weixin_36277197的博客 1116

java面试笔试——索引知识

目录1.对Mysql索引的理解。2.索引有哪几种?3.如何创建及保存Mysql的索引?(1)在创建表时创建索引(在定义约束的同时相当于在指定列上创建了一个索引)(2)在已存在的表中创建索引4.Mysql如何判断加不加索引?5.只要创建了索引,就一定会走索引吗?6.如何判断数据库的索引有没有生效?7.如何评估一个索引创建的合理性?8.索引越多越好吗?9.索引失效如何处理?10.所有字段都适合创建索引吗?11.索引的实现原理12.索引的重构过程13.Mysql的索引为何使用B+树?14.联合索引的存储结构是什么

weixin_46061874的博客 879

Raid5损坏两块盘

  以下为浪潮Inspur NF5460M4型号服务器故障处理过程: 设备raid5组损坏两块硬,并raid组处理离线状态,情况如图:     由于硬盘数据比较重要,面对此情况不要慌我们尽量做到安全保守的保证数据尽可能完整,以下为处理方法,(遇raid5两块盘出现问题处理方法)   以下截图均为遇相同问题的解决图案,并非现场截图。 Ctrl+H 进WebBios界面,发现两...

chen_lipeng的博客 2万+

Allegro File菜单实战指南:从导入网表到导出BOM的完整流程

PCB设计离不开对EDA软件菜单体系的深入理解。在Cadence Allegro中,File菜单是数据流转的中枢,它不仅是新建、打开、保存的基础入口,更是连接原理图与版图、设计与制造的关键桥梁。工程师常遇到的“导入网表报错”“导出BOM为空”“板框不闭合”等高频问题,大多源于对File菜单中Import与Export功能的理解不到位。从基础概念出发,先厘清Import(网表、DXF、IPC)与Export(BOM、ODB++、DXF)的工作原理,再结合版本兼容、封装库路径、单位设置等工程细节,即可构建完整的

weixin_32950759的博客 295

4、当数据表中A、B字段做了组合索引,那么单独使用A或单独使用B会有索引效果吗?(使用like查询如何有索引效果)

答:看A、B两字段做组合索引的时候,谁在前面,谁在后面,如果A在前,那么单独使用A会有索引效果,单独使用B则没有,反之亦然。同理,使用like模糊查询时,如果只是使用前面%,那么有索引效果,如果使用双%号匹配,那么则无索引效果 ...

shshaashsh的博客 5511

Netapp FAS2750更换磁盘后不同步问题处理

netapp fas2750磁盘更换后不同步问题处理

jetliu05的博客 1256

Explain计划之深入了解组合索引

群里大佬聊天,组合索引里面a,b,c三个字段索引,在遵循最左匹备原则情况下,单独b,c是不走索引的。可是群里又有大佬提出了疑惑,说select * form table where b = 2 and c = 3; 是走索引的。 上图: 从图中看出,确实bc是走了索引的。这是为什么呢? 我直接人都麻了,打破我以前理解的观点了啊。 随即,我就去创了个表,做了一番测试。 上图: 从图中可以看出,我的语句跟索引与上图一模雕样,为啥他的走了索引,我的没走索引呢。 百思不得其解,突然打破我以前自

我是臭鱼阿祥 1414

TransUnet官方代码训练自己数据集(彩色RGB3通道图像的分割)

官方代码:https://github.com/Beckschen/TransUNet 目的:训练5个类别的汽车部件分割任务(测试在另一篇博客中) 实现效果: 1. github下载代码,并解压。 项目里的文件可能跟你下载的不一样,不急后面会讲到! 2. 配置数据集(尽最大努力还原官方数据集的格式)。 通常自己手上的数据集分images和labels文件夹,分别存放着原始图像和对应的mask图像,如下图所示; mask图像中的像素有0,1,2,3,4 分别代表背景,车身,轮子,车灯,窗户,一共五个

qq_37652891的博客 5万+

告别手动拍照!用Python+JAKA机械臂+D455相机实现全自动手眼标定(附完整代码)

本文详细介绍了如何利用Python脚本实现JAKA机械臂与Intel RealSense D455相机的全自动手眼标定流程,提供从硬件配置到代码实现的完整解决方案。通过自动化标定,显著提升工业自动化中的精度和效率,适用于机器人视觉领域的二次开发需求。

weixin_30555125的博客 521

MySQL 的查询分析器 Explain 的8大详解 2024年11月27日全网最新 小白易懂

Explain 是 MySQL 提供的一个用于分析 SQL 查询语句执行计划的工具。它可以帮助开发人员和数据库管理员了解 MySQL 是如何执行查询的,包括查询会使用哪些索引、表之间的连接方式、数据的读取顺序等重要信息。通过分析这些信息,可以优化查询性能,解决查询效率低下的问题。

whs_8792的博客 1400

【RT-DETR多模态融合改进】| 自研 多模态大核选择模块:MM_LSK,适配多模态图像信息融合

本文记录的利用改进的多模态大核选择模块(MM-LSK)优化RT-DETR,构建可见光-红外双模态目标检测网络。在遥感等大尺寸图像的可见光-红外双模态小目标检测任务中,单模态检测易受光照、云雾、背景干扰等因素影响,且小目标外观信息匮乏,无法仅基于单模态外观实现较好的识别,因此需要融合双模态互补特性与广泛的跨模态上下文信息进行辅助。

Limiiiing的博客 381

MySQL查询分析器Explain(explain)使用

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了,如: explain select * from statuses_status where id=11; explain列的解释 table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何...

29岁的裴野永远爱你 2893

视频理解与处理——OpenClaw视频能力深度解析(2026视频版)

本文介绍了OpenClaw视频理解与处理的核心技术,重点分析了视频预处理流程。通过VideoProcessor类实现视频加载、帧采样、尺寸调整和归一化等基础处理功能,支持本地和在线视频源处理,为后续视频分析任务提供标准化输入。预处理模块采用均匀采样和标准化方法优化视频数据,确保动作识别、场景分析等高级应用的准确性,展现了OpenClaw强大的视频处理能力。

一键难忘的博客 464

对偶分解算法详解及其Python实现

对偶分解算法是一种广泛应用于求解凸优化问题的有效方法,尤其在大规模数据处理和分布式计算中展现出强大的实用性。在许多实际应用中,直接求解原始问题可能由于计算复杂度过高、资源受限或问题规模过大而变得不可行。这时,对偶分解方法为我们提供了一种高效的替代方案。对偶分解算法的核心思想是将复杂的原问题转化为其对应的拉格朗日对偶问题。通过引入拉格朗日乘子并构造对偶函数,该方法在一定程度上简化了问题的求解过程。特别是,对于包含多个约束条件的大规模优化问题,对偶分解可以将原问题分解为若干个小规模、相互独立的子问题。

闲人编程的博客 1752

mysql 解析器的作用_MYSQL 性能分析器 EXPLAIN 用法实例分析

本文实例讲述了MYSQL 性能分析器 EXPLAIN 用法。分享给大家供大家参考,具体如下:使用方法:EXPLAIN SELECT * FROM user;环境和数据准备-- 查看 MySQL 版本SELECT VERSION();-- MySQL 提供什么存储引擎SHOW ENGINES;-- 查看默认存储引擎SHOW VARIABLES LIKE '%storage_engine%';输出结果...

weixin_39700394的博客 633

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

浅看MySql的Explain语句分析器

如何可以让自己的sql以最好的性能去执行 这个前提就是得知道你的sql是否写的规范 是否充分的利用到了索引 sql的执行顺序 MySql就有一个自带的sql分析器Explain关键 连通sql语句一起执行

TianYu 195

jre9下载 jdk9

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

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

MySQL查询分析器EXPLAIN或DESC用法

MySQL查询分析器EXPLAIN或DESC用法目录:一、简单例子:二、具体使用格式三、mysql explain执行计划详解一、简单例子:MySQL可以通过EXPLAIN或DESC来查看并分析SQL语句的执行情况mysql&gt; desc one_and_two_kn_accumulate_stars; 或者 mysql&gt; explain one_and_two_kn_accumulat...

helloxiaozhe的博客 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

一文读懂 MySQL Explain 执行计划

一、前言 上周老周的一个好朋友让我出一篇教你读懂 SQL 执行计划,和我另一位读者反馈的面试题如何排查慢 SQL 的强相关,索性先出一篇一文读懂 MySQL Explain 执行计划。Explain 执行计划你一定得会看,不然你简历上就别去写什么你会 SQL 调优,不然面试官会觉得,Explain 执行计划你都不会看,那你还 SQL 调啥优啊?SQL 调你吧???开个小玩笑,玩笑归玩笑,重要是真的重要!!! 二、Explain 执行计划是什么? 什么是执行计划?简而言之,就是 SQL 在数据库中执行时的表现

riemann_的博客 4598

mysql explain 实例_MYSQL 性能分析器 EXPLAIN 用法实例分析

本文实例讲述了MYSQL 性能分析器 EXPLAIN 用法。分享给大家供大家参考,具体如下:使用方法:EXPLAIN SELECT * FROM user;环境和数据准备-- 查看 MySQL 版本SELECT VERSION();-- MySQL 提供什么存储引擎SHOW ENGINES;-- 查看默认存储引擎SHOW VARIABLES LIKE '%storage_engine%';输出结果...

weixin_42518008的博客 197

MySQL学习14_查询分析器explain

文章目录简介作用使用结果解析 简介 explain命令可以查看SQL语句的执行计划; 当explain与SQL语句一起使用时,MySQL将显示来自优化器的有关语句执行计划的信息,即MySQL解释了它将如何处理语句,包括有关如何联接表以及以何种顺序联接表的信息。 作用 分析出表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询 使用 需要在SQL语句之前加上explain命令即可,除select语句外,explain也能分析insert

万年青的博客 469

mysql 查询分析器定义变量_MySQL EXPLAIN和DESCRIBE(查询分析器)

查询是数据库中最频繁的操作,提高查询速度可以有效的提高 MySQL 数据库的性能。在《MySQL性能优化简述》一节我们了解了如何查询效率低下的 SQL 语句,本节主要介绍如何分析查询语句。通过对查询语句的分析,可以了解查询语句的执行情况,找出查询语句执行的瓶颈,从而优化查询语句。在 MySQL 中,可以使用 EXPLAIN 和 DESCRIBE 获取 MySQL 执行 SELECT 语句的信息,来...

weixin_36221525的博客 258

2、EXPLAIN和DESCRIBE(查询分析器)

查询是数据库中最频繁的操作,提高查询速度可以有效的提高 MySQL 数据库的性能。本节主要介绍如何分析查询语句。 通过对查询语句的分析,可以了解查询语句的执行情况,找出查询语句执行的瓶颈,从而优化查询语句。在 MySQL 中,可以使用 EXPLAIN 和 DESCRIBE 获取 MySQL 执行 SELECT 语句的信息,来分析查询语句。 EXPLAIN 语句的基本语法如下: EXPLAIN SELECT 语句; “SELECT 语句”参数一般为数据库查询命令,如“SELECT * FROM tb_stu

you can you up up up的博客 1064

mysql中查询分析器Explain的type的解释

导语: 很多情况下,有很多人用各种select语句查询到了他们想要的数据后,往往便以为工作圆满结束了。 这些事情往往发生在一些学生亦或刚入职场但之前又没有很好数据库基础的小白身上,但所谓闻道有先后,只要我们小白好好学习,天天向上,还是很靠谱的。 当一个sql查询语句被写出来之后,其实你的工作只完成了一小半,接下来更重要的工作是评估你自己写的sql的质量与效率。mysql为我们提供了很有用的辅助...

胡老汉的博客 1256
上一篇: Kafka数据不丢失机制
下一篇: MySQL(五) 索引失效
Dim_Jerry
博客等级 码龄8年 14粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值