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

自动驾驶车辆纵向控制实战:基于CARLA与ROS2的PID算法实现 本文详细介绍了基于CARLA与ROS2的自动驾驶车辆纵向控制实战,重点讲解了PID算法的实现与应用。通过搭建仿真环境、实现定速巡航和自适应巡航功能,帮助开发者掌握自动驾驶核心技术。文章还分享了系统集成、仿真验证及常见问题的调试技巧,为自动驾驶开发提供实用指导。 阅读详情

1.概念

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

2.结果解析

explain语句提供有关MySQL如何执行语句的信息。explain适用于selectdeleteinsertreplaceupdate语句。

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_nameuse 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 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 计算规则、索引选择性评估 实战优化案例:包含大表分 阅读详情

相关推荐

29、几何形态测量学在蝴蝶翅膀研究中的应用

本博客介绍了几何形态测量学在花斑木蛱蝶(Pararge aegeria)翅膀研究中的应用,探讨了环境因素对蝴蝶翅膀大小和形状的影响。通过选择合适的地标并采用Procrustes分析方法,研究揭示了不同景观类型下翅膀形状的差异及其潜在的适应性意义。文章还讨论了发育可塑性在飞行形态变异中的作用,并比较了几何形态测量学与其他传统方法的优势。最后提出了未来研究方向,包括多因素综合分析、发育机制探索及长期生态监测,为理解蝴蝶的适应性进化提供了重要线索。

ff678的博客 89

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

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

zzhongcy的专栏 9263

专题资料(2021-2022年)产品质量策划总结和认定报告.doc

专题资料

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

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

weixin_42512798的博客 2565

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

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

Meryoufdd的博客 587

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 MySQLEXPLAIN’ tool tocl...

weixin_35012535的博客 290

mysql explain介绍

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

Asan 452

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

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

u010138425的博客 394

MySQL 中的 EXPLAIN 命令:洞察查询性能的利器

EXPLAIN 命令是 MySQL 中非常强大的工具,可以帮助我们深入了解查询的执行计划,找出性能瓶颈,并进行相应的优化。通过合理地使用 EXPLAIN 命令,我们可以提高数据库的查询性能,提升应用程序的响应速度。在 MySQL 数据库的使用中,优化查询性能是至关重要的一项任务。它可以显示查询语句如何被 MySQL 解析执行,包括使用了哪些索引、表的连接方式、查询的行数估计等。通过分析这些信息,我们可以找出查询性能瓶颈,并进行相应的优化。《MySQL 中的 EXPLAIN 命令:洞察查询性能的利器》

我爱娃哈哈的专栏 1928

EXPLAIN带你看看如何优化MySQL

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

zwz1342的博客 400

mysqlexplain详解

1.简介 使用EXPLAIN关键字可以模拟优化执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通...

天高任鸟飞,海阔凭鱼跃 3170

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

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

qq_39126115的博客 1674

执行计划 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的博客 439

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

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

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

MySQL EXPLAIN详解

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

wu_amber的博客 276

MySQLEXPLAIN命令分析SQL执行计划

MySQL提供一个执行计划的工具,通过EXPLAIN命令可以模拟服务端执行SQL查询语句的过程,并对语句的执行计划进⾏分析, 并输出执行的详细信息, 以供针对性优化。因此可以分析语句或者表的性能瓶颈。

积跬步,至千里。 1716

MYSQL EXPLAIN结果详解

EXPLAIN不会告诉你关于触发器、存储过程的信息或用户自定义函数对查询的影响情况。 EXPLAIN不考虑各种Cache(缓存)。 EXPLAIN不能显示MySQL执行查询时所作的优化工作。 部分统计信息是估算的,并非精确值。 EXPALIN只能解释SELECT操作,其他操作要重写为SELECT后查看执行计划。 1 id select的识别符,这是select的查询序列号。 如果有两列数据id相同,则为同一组查询,由上到下执行。 如果id值不同,id值越大,优先级越高。 2 select_type

戳一下有机会获得一份额外加个蛋的蛋炒饭 2302

MySQL数据库下的Explain命令深度解析

Explain是一个非常有的命令,可以用来获取关于查询执行计划的信息,以及如何解释输出。Explain命令是查看查询优化器如何决定执行查询的主要方法。这个功能有一定的局限性,并不总是会说出真相,但是它的输出是可以获取的最好信息,值得花时间了解,可以学习到查询是如何执行的。

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 1418

索引怎么加合适?

索引怎么加合适?1,用eplain查看sql执行原理 1,用eplain查看sql执行原理 EXPLAIN简介 使用EXPLAIN关键字可以模拟优化执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。 ➤ 通过EXPLAIN,我们可以分析出以下结果: 表的读取顺序 数据读取操作的操作类型 哪些索引可以使用 哪些索引被实际使用 表之间的引用...

qq_41115103的博客 1493

explain结果每个字段的含义说明

sql优化

DRAGON的博客 913

MySQLexplain命令详解

在查询中每个表在输出中占一行,如果查询是两个表的联接,那么输出中将有两行,因此如果一个表与自己联接,输出中也会有两行。explain命令是查看MySQL查询优化器如何执行查询的主要方法,可以很好的分析SQL语句的执行情况。每当遇到执行慢(在业务角度)的SQL,都可以使用explain检查SQL的执行情况,并根据explain结果相应的去调优SQL等。记住,输出中的行以MySQL实际执行的查询的顺序出现,而这个顺序不总是与其在原始SQL中保持一致。

dongyan3595的博客 610
上一篇: 设计模式-单例模式
下一篇: MySQL数据类型之数值数据类型
编程还未
博客等级 码龄4年 4291粉丝 · 31原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

编程还未

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

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

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

打赏作者

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

抵扣说明:

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

余额充值