MySQL优化之explain执行计划结果解析

MySQL 5.7 Explain 执行计划深度解析:从结果解读到 SQL 优化实战指南 MySQL 5.7 Explain 执行计划解析与优化指南 本文深入解析 MySQL 5.7 的 Explain 执行计划,帮助开发者掌握 SQL 性能优化核心工具。主要内容包括: Explain 基础:执行计划的作用、三种执行方式及使用场景 字段深度解析:详细解读 id、select_type、type、key_len 等核心字段含义,重点分析 type 列的性能金字塔(从最优的 system 到最差 ALL) 索引优化策略:索引使用分析、key_len 计算规则、索引选择性评估 实战优化案例:包含大表分 阅读详情

1.概念

MySQL执行语句的时候,MySQL优化器会考虑许多技术来有效地执行SQL查询中涉及的查找。优化程序选择执行最有效查询的操作集称为“查询执行计划”,也叫EXPLAIN计划。

2.结果解析

explain语句提供有关MySQL如何执行语句的信息。explain适用于select、delete、insert、replace和update语句。

explain解释了MySQL如何处理语句,包括有关如何连接表以及以何种顺序连接的信息。

explain的输出结果有两种格式。一种是默认的,像查询的表格一样;一种是Json。

我们可以通过查看explain输出的结果,来判断自SQL的性能,从而优化,达到想要的效果。

我们拿一条查询SQL来举个栗子。

select * from school.student where age = 18;

使用explain

explain select * from school.student where age = 18;

现在是没有加任何索引:

idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEstudentNULLALLNULLNULLNULLNULL425Using where

如果要想输入json格式,explain format = json即可

explain format = json select * from school.student where age = 18;

JSON格式的结果就不放了,比较长,内容基本上和默认格式一样。

给age创建一个索引之后,再使用一下explain。结果如下:

idselect_typetablepartitionstypepossible_keyskeykey_lenrefrowsfilteredExtra
1SIMPLEstudentNULLrefstudent_age_indexstudent_age_index4const2100NULL

我们来解释一下输出的内容

列JSON名称含义
idselect_id编号
select_type没有SQL的类型
tabletable_name输出行的表
partitionspartitions匹配的分区
typeaccess_type联接类型
possible_keyspossible_keys可能选择的索引
keykey实际选择的索引
key_lenkey_len索引列类型字节长度
refref与索引比较的列
rowsrows要检查的数据行数的估算值
filteredfiltered按条件筛选的行的占比
Extra没有

2.1.id

这个就是一个连续的编号。

2.2.select_type

查询的类型。

2.3.table

结果所在的表名。

2.4.partitions

查询结果所在的分区。

2.5.type

这一列比较重要。

联接类型(join类型)。描述如何联接表。性能最好到最差依次为:

system、const、eq ref、ref、fulltext、ref or null、index merge、quique subquery、index subquery、range、index、all

解释一下含义

type解释
system该表只有一行(=系统表),是const的一个特例。
const该表最多有一个匹配行,从查询时开始时读取。该列可视为常量。利用主键查询,通常是const。
举个栗子:select * from student where id =1;
eq ref对于上一个表中的每个行组合,从此表中读取一行。
当连接使用索引的所有部分,并且索引是主键或唯一的非空索引时,将使用它。
ref对于上一个表中的每个行组合,将从此表中读取具有匹配索引值的所有行。
如果联接只使用键的最左边前缀,或者键不是主键或唯一索引(换句话说,如果联接无法基于键值选择一行),则使用ref。
如果使用的键只匹配几行,那么这是一种很好的连接类型。
fulltext连接使用全文索引执行。
ref or null类似于ref,MySQL会对包含值的行进行额外的搜索。最常用于解析子查询。is null也会用ref or null处理。
举个栗子:select * from student where address is null;
index merge使用索引合并优化。输出行中的列包含所用索引的列表,并包含所用索引的最长关键部分的列表。
unique subqueryin类型的子查询,且子查询查的是唯一索引,用unique subquery代替er ref。
举个栗子:select * from student where class_id in (select id from class where grade=1);
index subquery类似于unique subquery,子查询查的是非唯一索引。
range仅检查给定范围内的行,并使用索引选择行。当使用任何 =、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN、LIKE 或 IN() 运算符将键列与常量进行比较时,将使用range
index扫描索引树。有两种情况:
1.索引是查询的覆盖索引,并满足表中所需的所有数据;
2.从索引中读取的数据执行全表扫描,按索引顺序查找数据行。
all全表扫描。这是最糟糕的情况。

2.6.possible_keys

执行SQL时,可能用到的索引。

2.7.key

该列指示MySQL实际决定使用的索引。

如果强制使用索引请使用:force index index_name 或use index index_name;
如果强制忽略使用索引:ignore index index_name。

2.8.key_len

该列指示MySQL使用的key的长度。

2.9.ref

该列显示将哪些列或常量与列中指定的索引进行比较。

2.10.rows

该列显示MySQL认为它必须检查才能执行检查的行数。

2.11.filtered

该列显示按表条件筛选的表行的预估百分比。最大为100,这意味着不会对行进行筛选。
从100开始减小的值表示筛选量增加。
举个栗子:如果总共1000行的数据,显示50,则要与其他表联接的行数为1000*50=500。

2.12.extra

该列包含有关MySQL如何解析查询的其他信息。

MySQL EXPLAIN用法和结果 EXPLAIN是 MySQL 中用于分析查询执行计划的工具,它能帮助你理解 MySQL 如何执行你的 SQL 查询,并找出可能的性能瓶颈。 阅读详情

相关推荐

深度学习---双层神经网络中矩阵的运算及其含义记录

深度学习---双层神经网络中矩阵的运算及其含义记录神经网络的正向传播与反向传播正向传播第一层的权重矩阵第一层的输入矩阵Z^1^ = W^1^X^1^ + b^1^A^1^ = σ(Z^1^)第二层的权重矩阵第二层的输入矩阵Z^2^ = W^2^A^1^ + b^2^反向传播dz^2^ = A^2^ - Ydw^2^ = 1/n dz^2^A^1T^db^2^ = 1/n np.sum(dz^2...

qq_43228441的博客 3744

MySQL EXPLAIN详解,left join和in优化详解,以及optimizer_trace跟踪语句使用

简述: explain为mysql提供语句的执行计划信息。可以应用在select、delete、insert、update和place语句上。explain的执行计划,只是作为语句执行过程的一个参考,实际执行的过程不一定和计划完全一致,但是执行计划中透露出的讯息却可以帮助选择更好的索引和写出更优化的查询语句。 EXPLAIN输出项(来源于mysql5.7文档) 备注:当使用FORMAT=JSON, 返回的数据为json结构时,JSON Name为null的不显示。 Column JSON Na

zzhongcy的专栏 9271

如何导入su_利用GIS快速生成SU场地模型

01|前言:进入2021年了,希望大家也是一个新的开始。告诫自己多写文章多更新,多读点书多旅行。然而元旦由于出去玩了4天,积累了一些事情要处理,一直没有时间好好写点东西。今天给大家带来的分享主题叫“利用GIS快速生成SU场地模型”。相关的视频方法其实B站上也有,但我相信视频很多人都不会看,我自己也是。直接给大家上操作流程。主要的操作步骤是【获取场地的矢量shp文件】—【导入ArcScen...

weixin_33806859的博客 9813

mysql explain update_MYSQL EXPLAIN执行计划命令详解(支持更新中)

摘要:本篇是根据官网中的每个一点来翻译、举例、验证的;英语不好,所以有些话语未必准确,请自行查看官网,若有些点下面没有例子的是因为当时一下子没有想出那么多来,如果大家有遇上好的例子,欢迎在下面留言我持续更新查看执行计划的关键EXPLAIN版本MYSQL5.6,用到的库是官网例子sakila,自行下载导入由于要把每个点都翻译出来,还需要举例,所以需要一定的时间,本人先把架构理出来,然后逐个点开始官网...

weixin_42512798的博客 2571

从Mule ESB到Apache Camel:手把手教你设计一个轻量级企业集成框架的‘心脏’

本文深入探讨了从Mule ESB到Apache Camel的轻量级企业集成框架设计实践,对比了两者在协议支持、消息处理能力和部署灵活性等方面的差异。通过实际代码示例和性能优化技巧,帮助开发者构建高效的核心模块,适用于现代微服务架构下的系统集成需求。

weixin_28738165的博客 374

YOLOv8改进策略【卷积层】| CVPR-2023 部分卷积 PConv 轻量化卷积,降低内存占用

本文记录的是利用优化的目标检测方法研究。深度可分离卷积可以减少FLOPs,但会导致更高的内存访问,引起延迟并减慢整体计算。部分卷积利用逐点卷积处理通道冗余,减少模型计算量和内存访问量。Run, Don’t Walk: Chasing Higher FLOPS for Faster Neural Networks及其改进的实现代码如下: 四、创新模块 4.1 改进点⭐ 模块改进方法:直接加入(第五节讲解添加步骤)。模块加入如下:模块改进方法:基于的(第五节讲解添加步骤)。第二种改进方法是对中的进行改进,并将

Limiiiing的博客 1015

Mysql性能优化(三)--explain返回的结果说明

ref: 如果使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里显示为func;union:union连接的多个select查询,第一个查询是derived派生表,除了第一个表外,第二个以后的表的select_type都是union;如果显示的是all,则表示该SQL语句进行的是全表扫描,没有使用index,那该SQL语句的性能是最差的,除了all之外,其它的type都可以使用到索引;

Meryoufdd的博客 592

【ARM Coresight | AMBA BUS | Cache 与 MMU/MPU | CoreLink | GCC | CSH 专栏导读】

1. ARM Coresight(SoC-400/SoC-600) 专栏 2. ARMv8/v9 CPU/Cache 专栏 3. Linux ARM AMBA 总线 专栏 4. Trace32/DS-5 专栏。。。

CodingCos的博客 8241

mysql explain update_MySQL EXPLAIN UPDATE

I am trying to answer the following question as part of my college revision:Create an index on at least one attribute of a table in the‘employees’ database, where you use the MySQL ‘EXPLAIN’ tool tocl...

weixin_35012535的博客 291

KVM — 与 QEMU 和 Libvirt 的关系

目录目录 前言 KVM QEMU KVM 与 QEMU qemu-kvm Libvirt Libvirt 在 OpenStack 中的应用前言如果是刚开始接触虚拟机技术的话, 对上述的概念肯定会有所混淆, 傻傻的分不清. 尤其在看虚拟化技术文档时导致理解能力下降, 所以在开始学习虚拟化技术之前对这些概念有一个整体的认识和清晰的理解, 就显得很有必要了.KVMKVM(Kernel-basedVirtu

烟云的计算 5735

【YOLOv11改进 - 特征融合】DySample :超轻量级且高效的动态上采样器

【YOLOv11改进 - 特征融合】DySample :超轻量级且高效的动态上采样器

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 1070

mysql explain介绍

在日常开发中,常常需要查看sql性能,则用explain可以查看sql语句使用索引情况 使用explain可以分析如下结果: 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用 每张表有多少行被优化器查询 使用方法:explain +sql语句 EXPLAIN SELECT * FROM tablename where xxx 执行计划包含信息:...

Asan 457

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

MySQL执行计划深度解析从Explain结果到索引优化实战

MySQL的EXPLAIN命令是SQL性能优化的雷达。通过系统地学习其输出含义,并结合对索引原理的深刻理解,我们可以将慢查询转化为高效查询。优化的核心在于促使查询尽可能使用高效的索引访问方式,减少需要扫描的数据量,并避免额外的排序和临时表操作。将EXPLAIN分析作为日常SQL编写的习惯,是构建高性能数据库应用的关键一步。

u010138425的博客 396

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

EXPLAIN带你看看如何优化MySQL

Explain如何评估sql语句,从哪些参数看出问题?

zwz1342的博客 406

WINCC7.3破解文件

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

MySQL执行计划Explain如何分析 SQL语句?

之前写过相关的执行计划分析语句,但是内容是五年前写的,马马虎虎的,观感极差。所以这篇是弥补五年前的马虎而做。首先,执行计划的用法是在查找语句前使用EXPLAIN 关键字,执行完以后会返回一个表格,其中表格的字段有id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extra等。每个列都有不同的含义,需要逐一理解。id:表示查询中执行select子句或操作表的顺序。id相同,执行顺序由上至下;

qq_39126115的博客 1682

执行计划 explain

1、一个SQL 语句之前加上 explain 就可以看其执行计划,然后对其做相应的优化了。 2、下面是我 explain 之后的结果截图,你能看到都是有哪些列。 3、执行计划包含的信息: id,select_type,table,partitions,type,possible_keys,key,key_len,ref,rows,filtered,Extra 官方文档对其有详细的解释:MySQL :: MySQL 5.7 Reference Manual :: 8.8.2 EXPLAIN Out

qianqian的博客 444

全面解析 Msyql Explain 执行计划,优化SQL查询性能

本文详细讲解了 MySQL 中的EXPLAIN关键字,包括其基本用法、输出结果的各个字段含义、可选参数、更多高级特性以及性能优化等相关内容。使用EXPLAIN关键字可以深入了解查询语句的执行过程,发现其中的瓶颈和改进空间,从而优化查询性能,提升数据库系统的整体运行效率。在实际应用中,我们应当密切关注查询语句的执行情况,不断改进优化,提高系统性能和稳定性。

兴趣是最好的老师,勤能补拙 1691

mysql explain查看执行计划

Explain简介 本文主要讲述如何通过 explain 命令获取 select 语句的执行计划,通过 explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了,表之间的引用,每张表有多少行被优化器查询等信息。 下面是使用 explain 的例子: 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查...

thatkrisyang 322

linux查看sql执行计划,【MySQL运维】使用explain执行计划对SQL进行分析优化

一、执行计划的作用执行计划是用于计算数据库优化器处理SQL的资源成本,在MySQL中使用执行计划的命令是explain(也可以写为desc、describe),通过该命令可以查看SQL在真正执行时所需要经历的一系列过程,通过执行结果可以看出一条复杂的SQL查找顺序、是否有通过索引查询等信息。执行计划命令所带的SQL并不会真正执行,所以不会担心占用系统资源,用于对SQL进行分析优化非常有用。如下示例...

weixin_35112865的博客 518

MySQL EXPLAIN详解

在日常工作中,我们会有时会去查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,此时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。MySQL EXPLAIN命令是查询性能优化不可缺少的一部分,该文主要讲解explain命令的使用及相关参数说明。 EXPLA...

wu_amber的博客 278

MySQL中通过EXPLAIN如何分析SQL的执行计划详解

转载:https://www.jb51.net/article/145515.htm 前言 在MySQL中,我们可以通过EXPLAIN命令获取MySQL如何执行SELECT语句的信息,包括在SELECT语句执行过程中表如何连接和连接的顺序。 下面分别对EXPLAIN命令结果的每一列进行说明: .select_type:表示SELECT的类型,常见的取值有: 类型 说明 ...

akunshouyoudou的博客 258

MySQL优化——看懂explain

explain     explain模拟优化器执行SQL语句,在5.6以及以后的版本中,除过select,其他比如insert,update和delete均可以使用explain查看执行计划,从而知道mysql是如何处理sql语句,分析查询语句或者表结构的性能瓶颈。 作用 1、表的读取顺序 2、数据读取操作的操作类型 3、哪些索引可以使用 4、哪...

weixin_42470983的博客 352

mysql explain ref const_MySQL EXPLAIN 详解

一 .介绍EXPLAIN 命令用于SQL语句的查询执行计划。这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的。这条命令并没有提供任何调整建议,但它能够提供重要的信息帮助你做出调优决策。先解析一条sql语句,你可以看出现什么内容EXPLAIN SELECT * FROM person,dept WHERE person.dept_id = dept.did and per...

weixin_30126739的博客 7654

【mysql性能优化】- 执行计划explain

文章目录1 前言2 准备3 执行计划结果列的含义3.1 id -- 用来判断语句执行的顺序3.2 select_type -- 判断查询的类型3.3 table -- 当前行操作的数据是关于哪张表的3.4 type -- 索引类型 官网:https://dev.mysql.com/doc/refman/8.0/en/explain-output.html 1 前言 本文用mysql5.5版本测...

suchahaerkang的博客 488

mysql 查询计划_MySQL EXPLAIN 命令: 查看查询执行计划

MySQL 的 EXPLAIN 命令可以查看SELECT语句的执行的计划,是 MySQL 查询优化的必备工具。通过执行计划可以了解查询方式、索引使用情况、需要扫描的数据量以及是否需要临时表或排序操作等信息。我们需要分析执行计划对查询进行有的放矢的优化。需要注意:EXPLAIN不考虑触发器、存储过程或用户自定义函数对查询的影响EXPLAIN不考虑缓存EXPLAIN只能分析执行计划,不能显示存储引擎在...

weixin_32768455的博客 272
上一篇: 设计模式-单例模式
下一篇: MySQL数据类型之数值数据类型
编程还未
博客等级 码龄5年 4293粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程还未

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值