MySQL认知__explain简介(下)

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

EXPLAIN的基本介绍

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

explain的用法

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

 用法如下所示:

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

explain语句结果
 接上篇,这篇将继续介绍余下的属性
6. possible_keys

 possible_keys的意思为:MySQL能使用哪个索引在表中找到记录,查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询使用。

 该列完全独立于EXPLAIN输出所示的表的次序。这意味着在possible_keys中的某些键实际上不能按生成的表次序使用。如果该列是NULL,则没有相关的索引。在这种情况下,可以通过检查where子句看是否它引用某些列或适合索引的列来提高你的查询性能。如果是这样,创造一个适当的索引并且再次用explain检查语句。

7.keys
 key列显示MySQL实际决定使用的键(索引)。
如果没有索引,键是NULL。想要强制MySQL使用或者忽略possible_keys列中的索引,在查询中使用FORCE_INDEX、USE INDEX或者IGNORE INDEX。

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

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

10.rows
 表示MySQL根据表统计及索引选用情况,估算的找到所需的记录所需要读取的行数。
是个简单且重要的参考值,数值越大说明性能越差,说明没有用好索引。

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

  • Using where
     列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部请求列都是同一个索引,表示MySQL服务器将在存储引擎检索后再进行过滤。

Using where图
 我们可以和下面的Using index来做对比。两者的区别的是remark字段是非索引字段。

  • Using index
     列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部请求列都是同一个索引,表示MySQL服务器将在存储引擎检索后再进行过滤。

 我们可以和上面的Using where来做对比。两者的区别的pool_no为索引字段。
Using index

  • Using temporary
     表示MySQL需要使用临时表来存储结果集,常见于排序和分组查询。出现该语句说明,是要考虑一下优化性能。

  • Using filesort
     MySQL中无法利用索引完成的排序操作成为文件排序。

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

  • Impossible where
     这个值强调了where语句会导致没有符合条件的行。

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

总结

1. explain 不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况。
2.  explain 不会考虑到各种cache缓存。
3.  explain 不能显示MySQL在执行查询时所作的优化工作。
4.  部分统计信息是估值,并非精确值。
5.  explain只能解释select操作,其他操作要重写为select 后查看执行计划。
一文说清楚 MySQL 的 explain explain 是 MySQL 提供的一个用于分析查询语句执行计划的工具。它不会实际执行查询语句,而是返回 MySQL 执行该查询的详细计划,包括如何连接表、使用什么索引、扫描多少行数据等信息。通过这些信息,开发者可以了解查询语句的执行过程,判断索引是否被有效使用,从而有针对性地进行优化。explain 在 MySQL 查询优化中具有重要的作用,它能帮助我们深入了解查询语句的执行计划,发现性能瓶颈。 阅读详情

相关推荐

MySQL中的EXPLAIN的详解

explain(执行计划),使用explain关键字可以模拟优化器执行sql查询语句,从而知道MySQL是如何处理sql语句。explain主要用于分析查询语句或表结构的性能瓶颈。– 表的读取顺序– 数据读取操作的操作类型– 哪些索引可以使用– 哪些索引被实际使用– 表之间的引用– 每张表有多少行被优化器查询EXPLAIN 或者 DESC命令获取 MySQL 如何执行 SELECT 语句的信息,包括在 SELECT 语句执行过程中表如何连接和连接的顺序。版本情况。

web15185420056的博客 1155

MySQL 表的约束与数据库设计

MySQL 表的约束与数据库设计 第1节 数据库的基础语法 1.1 数据库入门 1.1.1 SQL 语句的分类: DDL 数据定义语言 DML 数据操作语言 DQL 数据查询语言 DCL 数据控制语言 1.1.2 MySQL 管理数据库 ➽ 查看所有数据库 show databases; ➽ 创建数据库 create database 库名; ➽ 查看数据库创建数据的语句: show cr...

房东的猫咪的博客 569

Xilinx FPGA MultiBoot实战:7Series与UltraScale的SPI Fallback配置详解

本文深入解析了Xilinx FPGA的MultiBoot(多启动)与Fallback(回退)功能,针对7系列与UltraScale/UltraScale+系列,提供了从约束文件编写、看门狗集成到镜像烧录的完整实战配置指南。文章重点对比了两个系列在SPI Fallback配置上的关键差异与注意事项,旨在帮助工程师构建高可靠、永不宕机的FPGA系统。

weixin_29197051的博客 547

Incorrect column name 'remark '

mysql数据库,原来有张表,今天在表里新增了一个字段remark,然后在保存表的时候,就提示异常了,如题:Incorrect column name 'remark '. 开始以为remark是mysql的关键字,查了一下不是,然后随便添加了其他任意的测试字段,都没有问题.后来不经意见发现错误提示信息中的引号里面的内容,原来是字段名后面多了一个空格,应该是从键盘敲入字段名称后不小心键入的空格,...

放羊的小孩 1593

瑞萨RH850/U2A8以太网模块mcal说明

如下所有功能的支持需要在达芬奇中开启EthGlobalTimeSupport。秒[32bit], 纳秒[32bit], 纳秒小数[20bit]每一帧发送数据的相关结构缓冲区都放在变量。每一帧接收数据的相关结构缓冲区都放在变量。

至道无难,唯嫌拣择。 1860

Cursor Cloud Agent:云原生编程工作流的底层重构

编程工作流正从本地计算范式转向云原生执行范式。Cloud Agent 本质是将代码理解、生成、执行与调试等核心能力下沉至隔离、可控、按需分配的云端虚拟机,通过 Firecracker 微虚拟机实现亚秒级启动,并依托上下文快照、环境镜像化和内核级沙箱保障一致性、算力弹性与数据安全。这一范式突破了传统本地 AI 编程助手在环境依赖、调试能力与企业合规上的根本局限,使 IDE 从编辑工具升维为分布式开发指挥中心。本文深入解析其运行机制与工程落地实践。

weixin_34354173的博客 337

Mysql字段类型

Mysql数据类型 1. 数值类型: 包括整数类型TINYINT、SMALLINT、MEDIUMINT、INT、BIGINT、浮点小数数据类型FLOAT和DOUBLE,定点小数类型DECIMAL。 类型 存储 范围(有符号) 无符号 TINYINT 1字节 -128~127 0~255() SMALLINT 2字节 32768~32767 0~65535 MEDIUMINT 3字节 -8388608~8388607 0~16777215 INT 4字节 -2147483648~214

w15997402070的博客 427

YOLOv11-seg改进系列 | 引入CVPR2022 MetaFormer,零参数池化Token混合+StarReLU MLP,精度涨不掉速

本文提出了一种改进YOLOv11分割任务的C3k2_PoolingFormer模块,通过引入MetaFormer架构和Pooling Token Mixer,在保持模型轻量化的同时增强全局感受野建模能力。核心创新包括:1)使用零参数的AvgPool3×3差值作为Token Mixer,实现高效邻域信息聚合和局部对比增强;2)采用StarReLU MLP替代传统激活函数,提升非线性表达能力。改进后模型仅增加6.1%参数量,却能显著提升分割精度,特别适用于需要长程依赖建模的实例分割任务。该设计为轻量级视觉模型提

qq_44224801的博客 431

MySQL学习笔记

Mysql学习笔记

走在未来的路上 396

定位分析RCU stall问题

在编译内核时打开或者在启动参数中增加这样统计信息是在采样周期中收集的。其中number行分别是发生stalled的cpu上的硬中断,软中断,和上下文的切换次数cputime行的前三列分别是硬中断,软中断和任务消耗的cpu时间,单位为ms.最后一个数字是统计的周期时间(ms).因为用户态的任务通常不会引起RCU CPU stalls,所以任务通常是内核任务,这也是为什么只统计system cpu的原因.

happyAnger6的专栏 1993

ArcGIS Pro 3.4 二次开发 - 布局

本文介绍了在ArcGIS Pro SDK 3.4和.NET 8环境下操作布局工程项的相关方法。主要内容包括:引用布局工程项和关联布局,在新视图中打开或激活已有布局视图,引用活动布局视图,导入/移除布局工程项,创建基本布局或带参考线的自定义布局,修改布局页面尺寸,以及创建圆形图形元素等操作。重点演示了如何通过CIM(Core Infrastructure Model)进行高级布局配置,并详细说明了圆形图形元素的创建过程,包括几何构建、符号设置和图形生成。所有涉及UI线程的操作都遵循ArcGIS Pro SDK

Winemonk 795

Mysql详解

一、数据库的基本概念 数据库的英文单词:DataBase(DB) 数据库:用来存储和管理数据的仓库。 数据库的特点: 持久化存储数据,其实数据库就是一个文件系统 方便存储和管理数据 使用了统一的方式操作数据库---SQL 常见的数据库软件: MySQL:开源免费的数据库,小型的数据库,已经被 Oracle 收购了。MySQL6.x 版本也开始收费。后来 Sun 公司收购了MyS...

m0_37671741的博客 633

手把手教你从入门到精通C# MES通信

本文是C#与MES通信通信的目录,使用C#与各种MES系统通信的方法我都会在专栏中讲到,比如WebService、Http、Ftp、共享文件夹、串口通信等,绝对是上位机软件工程师实现与MES系统通信的必备教程!

qq_34059233的博客 8748

MySQL认知__explain简介(上)

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

pseudonym_的博客 290

在Windows 10/11上使用Qt和SOEM构建EtherCAT主站:工业控制新纪元

☑️ Windows平台上的EtherCAT主站☑️ 微秒级精度的实时控制☑️ 动态设备配置与管理☑️ 直观的Qt监控界面☑️ 分布式时钟同步“技术不是取代人类的工具,而是拓展人类能力的翅膀。当我们在Windows上实现微秒级精度的工业控制时,不是在征服机器,而是在创造人与机器和谐共舞的新舞台。集成AI异常检测算法支持EtherCAT G协议云端监控与远程诊断完整项目代码预编译SOEM库示例视频教程。

QQ_778132974的博客 633

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MySQL中EXPLAIN详解

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

wh柒八九的博客 5919

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

mysql 的explain

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

qq_39201004的博客 1762

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【MySQL】之 Explain 命令简介

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

王廷云的博客 3106

mysql中EXPLAIN详解

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

qq_41534540的博客 1730

MySQL的explain使用详解

通过本篇文章了解MySQL中explain的用法和执行结果中每个字段的含义以及具体使用场景,explain工具有助于我们发现sql语句中的潜在问题,给sql语句的优化指明了一定的方向。

qq_42133326的博客 3073

mysql之EXPLAIN 详解

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

qq_43460315的博客 1846

MySQL EXPLAIN 完全解读

SELECT_TYPE 是 MySQL 中 EXPLAIN 命令的输出列之一,用于描述查询中每个 SELECT 子句的类型。在MySQL中,EXPLAIN语句用于获取关于如何执行SQL语句的信息。在这个例子中,non_indexed_column 是一个没有索引的列,所以 key 的值为 NULL。在这个例子中,indexed_column 是一个有索引的列,所以 key 的值就是该列的索引名称。假设我们有一个名为users的表,其中包含id(主键)、name和email(唯一索引)三个字段。

chen_heng_Ali的博客 2625

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

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

程序新视界 1570

mysql EXPLAIN命令的输出列简介

mysql EXPLAIN命令的输出列简介

听海边涛声 1217

详解 MYSQL 中 EXPLAIN 用法

执行顺序4:id列为1,表示是UNION里的第一个select,select_type列的primary表示该查询为外层查询,table列被标记为,表示查询结果来自一个衍生表,其中derived3中的3代表该查询衍生自第三个select查询,即id为3的select。表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度,在不损失精确性的情况下,长度越短越好。子查询得到结果的d1临时表,子查询条件为id = 1 常量,type是const,id为1的相当于只查询一条记录,type为system。

PJ码匠人 5125
上一篇: MySQL认知__explain简介(上)
下一篇: MySQL优化__基础优化注意选项
pseudonym_
博客等级 码龄10年 88粉丝 205原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值