Explain执行计划详解

作者:IT王小二

博客:https://itwxe.com

一条查询 SQL 语句为什么会执行很慢?执行的时候走了什么索引?多表查询的时候 SQL 大体执行流程是怎么样的?Explain 执行计划详解给各位客官一一道来。

一、示例MySQL安装方式和版本

首先需要 MySQL 安装的客官看这两篇,小二演示使用的是 Docker 的安装方式:

小二安装完的 MySQL 数据库版本为 5.7.36

二、Explain工具简介

通常我们在生产环境会碰到查询速度比较慢的 SQL 语句,那么怎么知道 SQL 语句为什么执行慢呢?这个时候就需要用到 Explain 执行计划来分析我们的语句了。

通过使用 Explain 关键字可以模拟优化器执行 SQL 查询语句,执行会返回执行计划的信息,而不是执行这条SQL,当然如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中 。

总的来说,通过 Explain 从而知道 MySQL 是如何处理你的 SQL 语句的,分析查询语句或是表结构的性能瓶颈。那么通过 Explain 执行计划可以知道:

  • 表的读取顺序
  • 数据读取操作的操作类型
  • 哪些索引可能被使用
  • 哪些索引实际被使用
  • 表之间的引用
  • 每张表估计有多少行会被执行

三、本文用到的示例表

CREATE TABLE `author` (
  `id` int(11) NOT NULL,
  `name` varchar(45) DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `author` (`id`, `name`, `update_time`) VALUES (1,'itwxe','2022-01-12 19:27:18'), (2,'admin','2022-01-12 19:27:18'), (3,'superAdmin','2022-01-12 19:27:18');

CREATE TABLE `blog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(10) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `idx_title` (`title`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `blog
  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
数据库中,执行计划是用来描述数据库查询语句的执行方式和步骤的详细计划。其中,执行计划中的"Type"字段是指每个操作的类型。下面是一些常见的执行计划类型及其含义: 1. Full Table Scan(全表扫描):对于没有索引或者无法使用索引的查询,数据库需要扫描整个表来找到符合条件的数据。 2. Index Scan(索引扫描):使用索引进行查询,数据库根据索引的键值来定位符合条件的数据。 3. Index Unique Scan(唯一索引扫描):类似于索引扫描,但是该扫描只返回符合条件的第一条数据。 4. Index Range Scan(范围索引扫描):使用索引进行范围查询,数据库根据索引的键值范围来定位符合条件的数据。 5. Nested Loop Join(嵌套循环连接):对于两个表进行连接操作时,外层表的每一行都与内层表进行比较,以确定连接条件是否满足。 6. Hash Join(哈希连接):对于两个表进行连接操作时,将其中一个表按照连接条件进行哈希分组,然后将另一个表的数据进行哈希匹配。 7. Merge Join(合并连接):对于两个已经排序的表进行连接操作时,通过比较两个表的排序列来确定连接条件是否满足。 8. Sort(排序):对查询结果进行排序操作。 9. Group By(分组):对查询结果进行分组操作,并计算每个分组的聚合值,如求和、平均值等。 10. Aggregate(聚合):对查询结果进行聚合操作,如求和、平均值等,但不涉及分组。 这些只是一些常见的执行计划类型,实际上还有其他更复杂的类型。执行计划的选择取决于查询语句的复杂度、表的大小、索引的使用情况等多个因素。通过分析执行计划,可以帮助我们优化查询语句的性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值