【MySQL】EXPLAIN(执行计划)关键字是什么?

news2024/12/28 5:58:08

简介:

        explain是一个强大的 SQL 命令,用于分析和优化查询性能。通过查看数据库执行计划,我们可以理解查询是如何被处理的,包括表的访问顺序、使用的索引、连接类型等。这对于找到潜在的性能瓶颈非常重要。

 

目录

一、基本含义

二、解析执行计划


一、基本含义

        当我们在SQL查询前加上explain关键字时,它会给我们返回一张表,其中包含查询的执行计划信息,分别解释一下列值的含义:

1、id:查询的标识符,代表查询的顺序(1、2说明1先执行,2后执行)

 2、select_type:查询的类型。如①SIMPLE 简单查询 ②PRIMARY主查询 ③SUBQUERY子查询

 3、table:查询中涉及到的表名

4、type:连接类型,表示MySQL如何查找表中的行,常见类型有:

        ①ALL:全表扫描,可能导致性能变差

        ②INDEX:索引扫描,表ALL快,但仍会扫描所有索引。

        ③range:范围扫描,仅扫描匹配的行。

        ④ref:通过非唯一索引或者唯一索引查找所匹配的行。

        ⑤eq_ref:通过主键或唯一索引查找所匹配的行,效率较高。

        ⑥const:通过主键查找的常量值,效率最优。

5、possible_keys:查询可能使用的索引。

6、key:实际使用的索引。

7、key_len:使用的索引长度。有助于判断是否使用了合适的索引。

8、ref:显示哪些列或常量与key值匹配。

9、rows:估算需要读取的行数,以获取最终结果。

10、Extra:其他信息。例如使用临时表或文件排序等。

二、解析执行计划

1、检查连接类型:

        1.1:优先使用ref、eq_ref、const类型,这都是些高效率的连接方式。

        1.2:避免使用ALL,这会扫描全表索引,显著降低sql性能。

2、查看使用的索引:

        2.1:检查 possible_keys 列,查看是否有合适的索引可用。

        2.2:确保 possible_keys 列显示了有效的索引,并且key_len足够的短,尽可能提高效率

3、评估rows:

        在rows列中查看预估读取的行数,较小的数字意味着更好的性能。

4、注意其他信息:

        在 Extra 列中,特别是Using temporary 或 Using filesort 。这通常表明查询的性能受到了影响,需要我们去排查。 

三、实际的应用

1、优化查询

2、性能监控:定期使用explain 监控 复杂查询,确保它们没有随着表中数据量的增加而降低效率

3、调试问题:性能不如预期时,通过explain查看。

示例:

a表name加上普通索引

b表age字段加上普通索引 

 通过explain执行计划查看详细信息:

  由此看出,表a通过索引快速定位数据,没有进行全表扫描(ALL)

表b使用了等值连接(eq_ref),有效利用了主键索引。此时我们的索引使用情况是正常的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2138603.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

四、链表————相关概念详解

链表 前言一、链表是什么?二、链表的类型2.1 单向链表2.2 环形链表2.3 双向链表 三、链表中常用操作 (以单向列表为例)3.1 初始化链表3.2 判断链表是否为空3.3 获取链表长度3.4 插入节点3.4.1 链表头部添加节点3.4.2 链表尾部添加节点3.4.3 指定位置添加节点 3.5 删…

大数据处理技术:分布式文件系统HDFS

目录 1 实验名称: 2 实验目的 3 实验内容 4 实验原理 5 实验过程或源代码 5.1 HDFS的基本操作 5.2 HDFS-JAVA接口之读取文件 5.3 HDFS-JAVA接口之上传文件 5.4 HDFS-JAVA接口之删除文件 6 实验结果 6.1 HDFS的基本操作 6.2 HDFS-JAVA接口之读取文件 6.…

精通推荐算法30:行为序列建模之SIM— 基于检索建模长周期行为序列

1 行为序列建模总体架构 2 SIM提出的背景 MIMN第一次真正实现了长周期行为序列的建模,并取得了非常不错的业务效果。但受困于离线建模,它没办法实现用户行为序列和候选物品的交叉。同时采用一个固定大小的记忆网络来压缩超长序列,存在网络容…

redis-shake v4全量增量同步redis数据

1 概述 RedisShake是一个用于处理和迁移 Redis 数据的工具,github地址是https://github.com/tair-opensource/RedisShake。它提供以下特性: 1)Redis 兼容性: RedisShake 兼容从 2.8 到 7.2 的 Redis 版本,并支持各种部…

Spring Event 业务解耦神器(泛型喔!)

一.前言 又与我一直负责Cocos Creator的开发,我发现在TS领域,是可以自定义事件(有兴趣的大宝可以坐飞机直达:[CocosCreator]自定义事件(订阅/发布)管理器),这样做有什么好处呢?回答:解耦! 于是乎,我就觉得前端能干的事,后端也一样能干!当然,如果后端是TS或JS写的,比如nodeJS,…

Cyber Weekly #24

赛博新闻 1、OpenAI发布最强模型o1 本周四(9月12日),OpenAI宣布推出OpenAIo1系列模型,标志着AI推理能力的新高度。o1系列包括性能强大的o1以及经济高效的o1-mini,适用于不同复杂度的推理任务。新模型在科学、编码、数…

自动排课管理系统(源代码+论文+开题报告)

一、题目摘要 题目简要说明: 选排课系统功能的设计上,选排课系统可以分为登录、排课和选课3个子系统。登录子系统区分排课者(也即系统的管理者)、教师和学生这三者的不同身份,给出不同的权限,在页面中根据身份判断其相应具有的功…

Java 入门指南:JVM(Java虚拟机)——类的生命周期与加载过程

文章目录 类的生命周期类加载过程1)载入(Loading)2)验证(Verification)文件格式验证符号引用验证 3)准备(Preparation)4)解析(Resolution&#xf…

FreeRTOS—任务通知

一,概念介绍 队列、信号量、事件组等IPC技术都需要创建一个中间对象进程之间通过这些中间对象进行通讯或同步。创建对象就需要分配内存,占用一定内存。 二,任务通知的特点: 一个任务或ISR向另外一个指定的任务发送通知&#xff0c…

2024年最新版Vue3学习笔记

本篇文章是记录来自尚硅谷禹神2023年课程的学习笔记,不得不说禹神讲的是真的超级棒! 文章目录 创建Vue3工程main.ts文件解析初始化项目写一个简单的效果 Vue3核心语法setup函数setup和选项式的区别setup语法糖指定组件名称 响应式数据ref函数定义基本类…

C#学习系列之Gmap地图界面上的实时绘制问题

C#学习系列之Gmap地图界面上的实时绘制问题 前言总结 前言 在地图控件上增加绘制不规则图形,在之前的经验来看, System.InvalidOperationException:“无法使用 DependencyObject,它属于其父 Freezable 之外的其他线程。” 其实就是ui线程中…

9.15javaweb项目总结

1.贴吧界面算是完成了基本的 能通过url打开多个贴吧信息的界面了,界面水平不是很高,界面还有待提升,然后该界面的功能点还差点有点远,完成度不是很高。 2.解决了关注的功能问题 要考虑的地方有点多,最简单的就是点击…

SpringSecurity 5

springSecurity是spring的一个顶级项目 也是一个安全框架,可以在spring框架中直接引用。 springSecurity基于RBAC用来处理登录功能和各种权限校验。 〇、配置和运行springSecurity 导入security启动器和web启动器,写一个springBoot的启动类,可…

VMamba: Visual State Space Model 论文总结

题目:VMamba: Visual State Space Model(视觉状态空间模型) 论文:[2401.10166] VMamba: Visual State Space Model (arxiv.org) 源码:https://arxiv.org/pdf/2401.10166 (github.com) 目录 一、摘要 二、引言 三、方…

URP 线性空间 ui资源制作规范

前言: 关于颜色空间的介绍,可参阅 unity 文档 Color space URP实现了基于物理的渲染,为了保证光照计算的准确,需要使用线性空间; 使用线性空间会带来一个问题,ui资源在unity中进行透明度混合时&#xff…

嵌入式常用轻量级校验算法

在嵌入式中涉及通信基本都需要用到校验算法,如:UART常用的奇偶校验、CAN通信常用的CRC校验等等。下面我们将介绍几种常用的校验算法: 一、校验和 校验和是最基本,也是嵌入式软件工程师最常用的一种校验算法,其实现方法…

jdk知识

jdk,jre,jvm jdk>jre>jvm jdk的bin目录下有编译工具,平时写完java文件用jdk编译; jre的lib文件夹里面是java的jar包(.class文件),用来给jvm运行编译后的.class文件。 jvm:运行.class文件,.class文件读入到虚拟机…

JVM 垃圾回收机制和GC案例分析

1. 引言 Java 虚拟机(JVM)的垃圾回收(Garbage Collection, GC)机制,是自动内存管理的重要组成部分。它通过回收不再使用的对象,避免手动释放内存的麻烦。然而,随着系统复杂性的增加&#xff0c…

C/C++——野指针处理

在C++中,“野指针”(dangling pointer)指的是指向已释放或无效内存的指针。使用野指针可能导致程序崩溃或产生未定义行为。避免野指针的关键在于确保指针始终指向有效内存。下面是一些避免野指针的方法和最佳实践: 1、释放内存后置空指针 当释放掉分配的动态内存后,将指…

文本到3D生成

文本到3D生成是一种通过文本描述直接创建三维数字模型的技术。这种技术能够将语言描述转换成可视化的三维模型,使得内容创作者和设计师可以直接从概念阶段跳转到三维可视化,大大加快创作流程并提供更直观的设计和修改过程。 该技术的核心应用之一是基于…