【Mysql】 深入理解MySQL的执行计划

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: 【Mysql】 深入理解MySQL的执行计划

前言
在日常的数据库操作中,我们经常会遇到一些复杂的查询,这些查询可能会涉及到多个表的联合查询,或者是一些复杂的条件筛选。为了更好地理解和优化这些查询,了解MySQL的执行计划是非常重要的。本文将详细介绍MySQL的执行计划,包括其字段解释和示例SQL。

一、字段解释
在MySQL中,我们可以通过在SQL语句前添加EXPLAIN关键字来获取查询的执行计划。执行计划的结果包含以下几个字段:

id:查询的标识符。
select_type:查询的类型。
table:输出结果集的表。
type:连接类型。
possible_keys:可能应用在这个表中的索引。
key:实际使用的索引。
key_len:使用的索引的长度。
ref:与索引一起使用的列。
rows:MySQL 认为必须检查的行数。
Extra:包含 MySQL 解决查询的详细信息。
这些字段中,select_type、type和Extra字段的值可能会有多种。以下是对于一些关键字段可能的枚举值的详细解释:

select_type:查询的类型。可能的枚举值包括:

SIMPLE:简单的 SELECT(不使用 UNION 或子查询等)。
PRIMARY:最外层的 SELECT。
UNION:UNION 中的第二个或后续的 SELECT 语句。
DEPENDENT UNION:UNION 中的第二个或后续的 SELECT 语句,取决于外部结果。
UNION RESULT:UNION 的结果。
SUBQUERY:子查询中的第一个 SELECT。
DEPENDENT SUBQUERY:子查询中的第一个 SELECT,取决于外部结果。
DERIVED:在 FROM 子句中的子查询。
type:反映了连接使用的类型。从最好到最坏的类型如下:

system:表只有一行(=系统表)。这是最好的可能的连接类型。
const:表中的一个记录的最大值,因此,MySQL 能够在优化阶段就将这些记录从表中读出。这也是非常好的连接类型,因为它只在查询开始时读取一次。
eq_ref:在连接中,MySQL 在查找索引时,从前一张表中的每一个记录,返回一条记录。这是最好的多表连接类型,除了 const 类型。
ref:所有带有索引的连接类型,返回匹配某个单值的所有行。本类型和 eq_ref 类型一样,返回的行数也少,因为它只查找值而不是查找范围。
fulltext: FULLTEXT 索引的连接类型。
ref_or_null:本连接类型和 ref 类型类似,但是,MySQL 除了查找符合条件的行外,还查找 NULL。
index_merge:表示使用了索引合并优化方法。
unique_subquery:在某些 IN 查询中,MySQL 能够优化为一个常量,当查询是这样形式:value IN (SELECT Primary Key FROM table WHERE some_expr)。
index_subquery:和 unique_subquery 类似,但是,当使用的是非唯一性索引时,采用的查询类型就是 index_subquery。
range:只检索给定范围的行,使用一个索引来选择行。
index:全索引扫描,对索引进行全扫描。
ALL:全表扫描,MySQL 将遍历整个表来找到匹配的行。
Extra:包含 MySQL 解决查询的详细信息。可能的枚举值有许多,比如:

Using index:表示 MySQL 将遍历索引来查找而不是表。
Using where:使用了 WHERE 来限制哪些行将与下一张表匹配或者是在 UNION 操作中哪些行将被包括进来。
Using temporary:MySQL 需要使用临时表来保存结果集,这通常发生在对不同的列进行 ORDER BY 而不是 GROUP BY 的时候。
Using filesort:MySQL 会对结果使用一个外部的索引排序,而不是按照表内的索引顺序来读取。需要注意的是,这并不意味着 MySQL 会创建一个磁盘文件,只是与内部的索引顺序不同而已。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
9月前
|
SQL 关系型数据库 MySQL
MySQL视图、索引、备份与恢复、执行计划(三)
MySQL视图、索引、备份与恢复、执行计划(三)
44 0
|
20天前
|
SQL 关系型数据库 MySQL
MySQL数据库——索引(4)-SQL性能分析-profile详情、explain(profile查看指令,explain执行计划中各个字段的含义)
MySQL数据库——索引(4)-SQL性能分析-profile详情、explain(profile查看指令,explain执行计划中各个字段的含义)
19 2
|
1月前
|
SQL 算法 关系型数据库
从执行计划了解MySQL优化策略
从执行计划了解MySQL优化策略
59 0
从执行计划了解MySQL优化策略
|
1月前
|
关系型数据库 MySQL 数据库
mysq优化---mysql执行计划解释、优化查询、数据库结构、服务器
mysq优化---mysql执行计划解释、优化查询、数据库结构、服务器
|
1月前
|
存储 关系型数据库 MySQL
MySQL查询执行计划详解(EXPLAIN)
一、单表查询 访问方法/访问类型: • const:通过主键值或唯一二级索引与一个常熟进行等值查询(不包括NULL),只会生成一条记录 • ref:普通二级索引与一个常数进行等值比较,可能生成多条记录 • ref_or_null:ref的前提下可以加上or key is null • range:对应的扫描区间为若干个单点扫描区间或范围扫描区间(不包括负无穷到正无穷的范围) • index:扫描区间为全表,但是可以在二级索引中扫描(因为二级索引每条记录占用空间更小,所以需要读的页更少) • all:直接扫描全部的聚集索引记录
|
7月前
|
关系型数据库 MySQL 索引
Mysql的执行计划explain
Mysql的执行计划explain
38 0
|
10月前
|
存储 关系型数据库 MySQL
MySQL基础应用拓展、索引及执行计划
MySQL基础应用拓展、索引及执行计划
66 0
MySQL基础应用拓展、索引及执行计划
|
9月前
|
存储 关系型数据库 MySQL
MySQL视图、索引、备份与恢复、执行计划(二)
MySQL视图、索引、备份与恢复、执行计划(二)
54 0
|
9月前
|
存储 关系型数据库 MySQL
MySQL视图、索引、备份与恢复、执行计划(一)
MySQL视图、索引、备份与恢复、执行计划
63 0
|
9月前
|
SQL 存储 关系型数据库
一文读懂 MySQL Explain 执行计划
一文读懂 MySQL Explain 执行计划
220 0