mysql执行计划explain属性解析

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 所谓执行计划就是看sql执行情况,有没有走索引啊之类的很简单,在你的select语句前面加个EXPLAIN就行

所谓执行计划就是看sql执行情况,有没有走索引啊之类的

很简单,在你的select语句前面加个EXPLAIN就行

比如我的查询语句是

SELECT * FROM pool WHERE operating_status = “OFFLINE”

那他的执行计划就这么看

EXPLAIN SELECT * FROM pool WHERE operating_status = "OFFLINE"

反馈结果:

20210325104958834.png

从这个反馈就能看出你这个sql的执行情况


字段含义:


id:如果是子查询,表示各个子查询的顺序


id相同:执行顺序由上往下

id不同:id大的先执行

id为空:表示一个结果集,不需要使用它查询,常出现在包含union等查询语句中


select_type:查询的类型


SIMPLE:简单select查询

PRIMARY:包含子查询的最外层查询,比如select * from tableA where id = (select b_id from tableB where name = “蔡徐鸡”)

SUBQUERY:在select或 where子句中包含的查询,比如select * from tableA where id = (select b_id from tableB where name = “蔡徐鸡”)

DERIVED:from子句中包含的查询

UNION:出现在union后的查询语句中

UNION RESULT:从UNION中获取结果集当前执行计划的最后一条记录


table:查询中涉及到的表


如果表有别名那就显示别名


type:访问类型

这个属性值很重要,代表访问类型,性能由上往下逐渐降低


system:表只有一行:system表。这是const连接类型的特殊情况。

const :表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。

eq_ref:对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用。

ref:只有在查询使用了不是唯一或主键的key或者是这些类型的部分(比如,利用最左边前缀)时发生。

range:使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况。

index:对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)。

ALL:对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免。


possible_keys:可能用到的索引


查询涉及字段上若存在索引,就会列出来。当该列为 NULL时就要考虑当前的SQL是否需要优化了


key:实际用的索引


查询中实际使用的索引,若没有使用索引,显示为Null


key_length:索引长度

char()、varchar()索引长度的计算公式:(Character Set:utf8mb4=4,utf8=3,gbk=2,latin1=1) * 列长度 + 1(允许null) + 2(变长列)


ref:连接匹配条件


表示上述表的哪些列被用于查找索引列上的值,如果是使用的常数等值查询,这里会显示const,如果是连接查询,被驱动表的执行计划这里会显示驱动表的关联字段,如果是条件使用了表达式或者函数,或者条件列发生了内部隐式转换,这里可能显示为func。


rows:估算的查询结果行数


估算的,可能不准确


extra:附加信息

这个属性值也很重要


Using index:使用覆盖索引

Using where:使用了用where子句来过滤结果集

Using filesort:使用文件排序,使用非索引列进行排序时出现,非常消耗性能,尽量优化

Using temporary:使用了临时表



相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
6天前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
41 1
|
6天前
|
架构师 关系型数据库 MySQL
MySQL最左前缀优化原则:深入解析与实战应用
【10月更文挑战第12天】在数据库架构设计与优化中,索引的使用是提升查询性能的关键手段之一。其中,MySQL的最左前缀优化原则(Leftmost Prefix Principle)是复合索引(Composite Index)应用中的核心策略。作为资深架构师,深入理解并掌握这一原则,对于平衡数据库性能与维护成本至关重要。本文将详细解读最左前缀优化原则的功能特点、业务场景、优缺点、底层原理,并通过Java示例展示其实现方式。
17 1
|
17天前
|
SQL 关系型数据库 MySQL
MySQL EXPLAIN该如何分析?
本文将详细介绍MySQL中`EXPLAIN`关键字的工作原理及结果字段解析,帮助优化查询性能。`EXPLAIN`可显示查询SQL的执行计划,其结果包括`id`、`select_type`、`table`等字段。通过具体示例和优化建议,帮助你理解和应用`EXPLAIN`,提升数据库查询效率。
24 0
|
17天前
|
关系型数据库 MySQL 数据库
MySQL技术深度解析:每次最大插入条数探秘
MySQL技术深度解析:每次最大插入条数探秘
30 0
|
17天前
|
存储 缓存 关系型数据库
详细解析MySQL中的innodb和myisam
总之,InnoDB和MyISAM各有千秋,选择合适的存储引擎应基于对应用程序特性的深入理解,以及对性能、数据完整性和可扩展性的综合考量。随着技术发展,InnoDB因其全面的功能和日益优化的性能,逐渐成为更广泛场景下的首选。然而,在特定条件下,MyISAM依然保留其独特的价值。
56 0
|
10天前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
26 0
|
10天前
|
算法 Java 容器
Map - HashSet & HashMap 源码解析
Map - HashSet & HashMap 源码解析
25 0
|
10天前
|
存储 Java C++
Collection-PriorityQueue源码解析
Collection-PriorityQueue源码解析
21 0
|
10天前
|
安全 Java 程序员
Collection-Stack&Queue源码解析
Collection-Stack&Queue源码解析
24 0
|
8天前
|
存储
让星星⭐月亮告诉你,HashMap的put方法源码解析及其中两种会触发扩容的场景(足够详尽,有问题欢迎指正~)
`HashMap`的`put`方法通过调用`putVal`实现,主要涉及两个场景下的扩容操作:1. 初始化时,链表数组的初始容量设为16,阈值设为12;2. 当存储的元素个数超过阈值时,链表数组的容量和阈值均翻倍。`putVal`方法处理键值对的插入,包括链表和红黑树的转换,确保高效的数据存取。
29 5

推荐镜像

更多