数据库 MySql 执行计划分析

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
容器镜像服务 ACR,镜像仓库100个 不限时长
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 数据库 MySql 执行计划分析

@[toc]

数据库 MySql 执行计划分析


1、关键字

explain
查询 SQL 的执行计划

explain extended
会在 explain 的基础上额外提供一些查询优化的信息。 紧随其后通过 show warnings 命令可以 得到优 化后的查询语句,从而看出优化器优化了什么

explain partitions
相比 explain 多了个 partitions 字段, 如果查询是基于分区表的话,会显示查询将访问的分区。

目前 explain 会直接带 partitions 字段了

2、explain 结果列

id  select_type  table  partitions  type  possible_keys  key  key_len  ref  rows  filtered  Extra

3、可能值

select_type 可能值

SIMPLE:简单查询。查询不包含子查询和 union
PRIMARY:最外层 SELECT
UNION:第二层,在 SELECT 之后使用了 UNION。
DEPENDENT UNION:UNION语句中的第二个 SELECT,依赖于外部子查询。
UNION RESULT:UNION 的结果
SUBQUERY:子查询中的第一个 SELECT。
DEPENDENT SUBQUERY:子查询中的第一个 SELECT,取决于外面的查询。
DERIVED :导出表的 SELECT(FROM 子句的子查询)
MATERIALIZED:物化子查询
UNCACHEABLE SUBQUERY:无法缓存结果的子查询,必须为外部查询的每一行重新计算
UNCACHEABLE UNION  :UNION 属于不可缓存的子查询的第二个或后一个选择

table 可能值

union      <unionM,N,...>:该行指的是 id 值为 M 和 id 值为 N 的并集。
derived    <derivedN>:该行是指用于与该行的派生表结果 id 的值 N。 例如,派生表可以来自 FROM 子句
subquery   <subqueryN>:该行指的是 id 值为的行的具体化子查询的结果 N
NULL

type 可能值

NULL            MySQL 在优化过程中分解语句,执行时甚至不用访问表或索引,例如从一个索引列里选取最小值可以通过单独索引查找完成。
system          该表只有一行(如:系统表)。这是 const 连接类型的特例
const           该表最多只有一个匹配行,在查询开头读取。因为只有一行,所以优化器的其余部分可以将此行中列的值视为常量。const 表非常快
                因为它们只读一次。SELECT * FROM tbl_name WHERE primary_key=1;
eq_ref          除了 system 和 const类型之外,这是最好的连接类型。当连接使用索引的所有部分且索引是 PRIMARY KEY 或 UNIQUE NOT NULL 索引时使用它。
ref             表示上述表的连接匹配条件,即哪些列或常量被用于查找索引列上的值
fulltext        使用 FULLTEXT 索引执行连接。
ref_or_null     该联接类型如同 ref,但是添加了 MySQL 可以专门搜索包含 NULL 值的行。SELECT * FROM ref_table WHERE key_column IS NULL;
index_merge     该指数合并访问方法检索与多行 range 扫描和他们的结果合并到一个。 此访问方法仅合并来自单个表的索引扫描,而不扫描多个表。
unique_subquery 该类型替换了下面形式的 IN 子查询的 ref:
                value IN (SELECT primary_key FROM single_table WHERE some_expr) unique_subquery
                是一个索引查找函数,可以完全替换子查询,效率更高。【不常用】
index_subquery  该联接类型类似于 unique_subquery。可以替换 IN 子查询,但只适合下列形式的子查询中的非唯一索引:
                value IN (SELECT key_column FROM single_table WHERE some_expr)。【不常用】
range           只检索给定范围的行,使用一个索引来选择行。
index           该联接类型与 ALL 相同,Full Index Scan,index 与 ALL 区别为 index 类型只遍历索引树。
                这通常比 ALL 快,因为索引文件通常比数据文件小。
ALL             Full Table Scan, MySQL 将遍历全表以找到匹配的行。

possible_keys   可能使用的索引
key             实际使用的索引
key_len         显示的是索引字段的最大可能长度,不是实际使用长度
ref             使用哪个列或常数
rows            MySql 认为它执行查询时必须检查的行数。( 扫描出的行数 [估算的行数 ]。)
filtered        通过表条件过滤出的行数的百分比估计值
Extra           MySql 执行情况的描述和详细说明
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
13天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
145 11
|
8天前
|
存储 SQL 关系型数据库
MySQL的安装&数据库的简单操作
本文介绍了数据库的基本概念及MySQL的安装配置。首先解释了数据库、数据库管理系统和SQL的概念,接着详细描述了MySQL的安装步骤及其全局配置文件my.ini的调整方法。文章还介绍了如何启动MySQL服务,包括配置环境变量和使用命令行的方法。最后,详细说明了数据库的各种操作,如创建、选择和删除数据库的SQL语句,并提供了实际操作示例。
49 13
MySQL的安装&数据库的简单操作
|
4天前
|
SQL 关系型数据库 MySQL
创建包含MySQL和SQLServer数据库所有字段类型的表的方法
创建一个既包含MySQL又包含SQL Server所有字段类型的表是一个复杂的任务,需要仔细地比较和转换数据类型。通过上述方法,可以在两个数据库系统之间建立起相互兼容的数据结构,为数据迁移和同步提供便利。这一过程不仅要考虑数据类型的直接对应,还要注意特定数据类型在不同系统中的表现差异,确保数据的一致性和完整性。
18 4
|
13天前
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
28 2
|
SQL Java 数据库连接
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
176 0
MySQL---数据库从入门走向大神系列(十五)-Apache的DBUtils框架使用
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
131 0
MySQL---数据库从入门走向大神系列(六)-事务处理与事务隔离(锁机制)
|
存储 SQL 关系型数据库
MySQL---数据库从入门走向大神系列(五)-存储过程
MySQL---数据库从入门走向大神系列(五)-存储过程
134 0
MySQL---数据库从入门走向大神系列(五)-存储过程
|
数据库
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系
193 0
MySQL---数据库从入门走向大神系列(四)-子查询、表与表之间的关系(3)
|
SQL 关系型数据库 MySQL
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查
200 0
MySQL---数据库从入门走向大神系列(二)-用Java对MySQL进行增删改查