MySQL:MySQL的EXPLAIN各字段含义详解
在MySQL中,EXPLAIN是一个强大的工具,用于获取关于SELECT语句执行计划的信息。当你对查询性能有疑问时,使用EXPLAIN可以帮助你理解MySQL如何执行你的查询,并可能揭示性能瓶颈。
以下是EXPLAIN输出中各个列的详细解释:
一、 id
1.查询的标识符。每个SELECT都有一个唯一的标识符。
2.如果查询中有子查询,那么这个ID可以显示子查询的顺序。
二、select_type
查询的类型。
常见的值有:
1.SIMPLE:简单的SELECT,不包含子查询或UNION
2.PRIMARY:查询中最外层的SELECT
3.UNION、DEPENDENT UNION:内层查询依赖于外层查询的结果集
4.UNION RESULT:UNION的结果集
5.SUBQUERY:子查询中的第一个SELECT
三、table
1.输出结果集的表。
2.如果查询涉及多个表,则此列表示MySQL决定按哪个表的顺序来连接它们。
四、type
连接类型。
这是非常重要的列,因为它显示了MySQL决定如何连接表。
常见的值有:
1.system:表只有一行,等于const
2.const:表最多有一个匹配行
3.eq_ref:所有部分都使用了唯一索引或主键
4.ref:非唯一索引或唯一索引的非唯一前缀
5.fulltext:使用全文索引
6.ref_or_null:与ref类似,但增加了对NULL值的搜索
7.index_merge:表示使用了索引合并优化方法
8.unique_subquery:用于IN子查询,以确保子查询返回唯一值
9.index_subquery:与unique_subquery类似,但可能返回非唯一值
10.range:对索引进行范围查找
11.index:全索引扫描,比全表扫描稍快
12.ALL:全表扫描
五、possible_keys
显示可能应用在这张表中的索引。注意是可能,但不一定真的会用到。
1.key:实际使用的索引。如果为NULL,则没有使用索引。
2.key_len:使用的索引的长度。在不使用全部索引列的情况下,可以为你提供实际使用的索引部分的信息。
3.ref:显示哪些列或常量被用作索引查找上的参考点。
4.rows:MySQL估计必须检查的行数来找到相关的行。注意这是一个估计值。
5.filtered:表示返回结果的行数占需要检查的行数的百分比。
六. Extra
包含不适合在其他列中显示的额外信息。
1.Using filesort:MySQL需要对结果进行排序,这通常意味着没有可用的索引来完成排序操作,因此可能导致性能下降。
2.Using temporary:表示MySQL需要使用临时表来保存查询结果,这可能会增加I/O操作并降低性能。
3.Using index:表示查询只需要访问索引,而无需访问数据行。这通常意味着查询会更快。
4.Using where:表示使用了WHERE子句来过滤结果。
5.Using join buffer:表示使用了连接缓冲区来辅助连接操作。
代码示例:
EXPLAIN SELECT * from users
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE | users | NULL | ref | idx_name | idx_name | 767 | const| 1 | 100.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
在这个示例中,type 是 ref,表示 MySQL 使用了非唯一索引或唯一索引的非唯一前缀来连接表。possible_keys 和 key 列都显示了 idx_name 索引被使用。rows 列为 1,表示 MySQL 估计只需检查 1 行就能找到匹配的行。Extra 列中的 Using where 表示 MySQL 使用了 WHERE 子句来过滤结果。
七、优化建议:
1.type = ALL (全表扫描)
建议:添加适当的索引,尤其是WHERE子句、JOIN条件和ORDER BY子句中涉及的列。
2.type = index (全索引扫描)
建议:如果查询只需要索引中的部分信息而不是整行数据,考虑使用COVERING INDEX(覆盖索引),即索引包含了查询所需的所有数据。
3.rows列的值非常大
建议:检查WHERE子句是否足够严格以限制返回的行数。考虑添加或修改索引以减少需要检查的行数。
4.key_len列的值非常大
建议:如果key_len的值很大,可能是因为索引包含了较大的列(如VARCHAR(255))或复合索引中有很多列。考虑使用更小的数据类型或更少的索引列。
5.possible_keys列有值但key列为NULL
建议:即使MySQL识别到可能有用的索引,但由于某些原因(如索引不是最优选择、统计信息不准确等)它没有使用。考虑重新评估索引策略或更新统计信息。
6.Extra = Using filesort
建议:如果排序是必需的,考虑添加复合索引,将ORDER BY子句中的列作为索引的一部分。如果可能,避免在查询中混合使用ASC和DESC排序。
7.Extra = Using temporary
建议:对于涉及GROUP BY、DISTINCT或UNION等操作的查询,确保使用了合适的索引。考虑重写查询以减少临时表的使用
相关文章:
MySQL:MySQL的EXPLAIN各字段含义详解
在MySQL中,EXPLAIN是一个强大的工具,用于获取关于SELECT语句执行计划的信息。当你对查询性能有疑问时,使用EXPLAIN可以帮助你理解MySQL如何执行你的查询,并可能揭示性能瓶颈。 以下是EXPLAIN输出中各个列的详细解释: …...
域内路由选择协议——RIP
例题 RIP(Routing Information Protocol)是一种基于距离向量的路由协议,使用跳数作为度量标准来决定最优路径。下面我们详细分析为什么RIP协议要这样设计。 RIP协议的基本工作原理 距离向量算法: 每个路由器维护一张路由表&…...
JVM学习-MAT
MAT(Memory Analyzer Tool) 基本概述 Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况MAT是基于Eclipse开发的,不仅可以单独使用,还能以插件方式嵌入Eclipse中使用,是一款免费的性能分析工具 获取堆dump文件 dump…...
高通Android 12/13实现USB拔出关机功能
思路流程 1、监听广播->接受USB断开或者USB不充电广播->执行关机逻辑 涉及类 UsbManager/UsbDeviceManager \frameworks\base\services\usb\java\com\android\server\usb\UsbDeviceManager.java \frameworks\base\services\com\android\hardware\usb\UsbManager.java 2…...
用Python打造你的微博热搜追踪器
简介 在当今信息爆炸的时代,获取最新、最热门的信息成为了许多人的日常需求。微博热搜榜作为反映社会热点和公众关注焦点的重要窗口,其信息价值不言而喻。本文将介绍一个实用的Python爬虫程序,它能够自动爬取微博热搜榜的信息,并…...
TypeScript 在前端开发中的应用
TypeScript 在前端开发中的应用非常广泛。以下是一些常见的应用场景: 类型检查:TypeScript 是 JavaScript 的超集,它引入了静态类型检查。在开发过程中,TypeScript 编译器可以帮助开发者捕捉潜在的类型错误,提前发现并…...
【ArcGIS微课1000例】0115:字段数据类型案例详解
文章目录 一、ArcGIS数据类型概述二、案例1. 数字2. 文本3. 日期4. BLOB5. 对象标识符6. 全局标识符一、ArcGIS数据类型概述 创建要素类和表时,需要为各字段选择数据类型。可用的类型包括多种数字类型、文本类型、日期类型、二进制大对象 (BLOB) 或全局唯一标识符 (GUID)。选…...
ABC318-D
问题陈述 给你一个加权无向完整图,图中有 𝑁N 个顶点,编号从 11 到 𝑁N 。连接顶点 𝑖i 和 𝑗j 的边 (𝑖<𝑗)(i<j) 的边的长度与 (𝑖<𝑗)(i<j) …...
Java实现线程安全的单例模式
单例模式:保证某个类在程序中只存在唯⼀⼀份实例,而不会创建出多个实例,单例模式的类一般是构造器私有,通过一个方法返回唯一实例; 点这里查看线程安全的详细讲解; 常见的单例模式分为饿汉式和懒汉式 一…...
osg库的下载和安装
下载 下载地址:https://github.com/openscenegraph/OpenSceneGraph 安装 打开Cmake.exe,将上述下载的osg文件下的CMakeLists.txt文件拖入Cmake界面中。 在其路径下新建一个build文件 并配置cmake,点击Configure 修改如下几个选项 ACTUAL_3RDPARTY_DIR BUILD_OSG_EXAM…...
HTML、ASP.NET、XML、Javascript、DIV+CSS、JQuery、AJax的起源与简介
目录 HTML简介: 起源: ASP.NET简介: 起源: XML简介: 起源: JavaScript简介: 起源: DIVCSS简介: 起源: JQuery简介: 起源: AJax简介: HTML简介: HTML(Hyper Text Markup Language,超文本标记语言…...
SpringCloud微服务远程接口调用
一、概念 使用springcloud将项目拆分成一个一个微服务之后,微服务之间的接口调用就需要通过远程的方式实现,这里将介绍springcloud提供的两个微服务组件来介绍如何进行微服务间的远程接口调用。 1、使用RestTEmplate LoadBalanced来实现远程接口调用及…...
MySQL优化器的SQL重写规则
MySQL优化器的SQL重写规则 MySQL优化器的SQL重写规则:MySQL优化器会根据一定的规则对输入的SQL在保证含义不变的情况下进行SQL的优化重写。 1. 条件简化 1.1 移除不必要的括号 例如: ((a 5 AND b c) OR ((a > c) AND (c < 5))); --优化后 (a…...
57.void指针(万能指针)
目录 一.什么是void指针 二.视频教程 一.什么是void指针 在定义变量的时候,需要用到变量的类型,变量的类型在表示在内存中的大小,而void是空,表示的是无类型。所以如果用void来定义一个变量会发生错误(无法在内存中挖…...
国科大-智能计算系统(AICS)期末试题(2024春)
国科大-智能计算系统期末试题(2024春) 填空题简答题最后一道大题 部分题目记录 填空题 卷积层中,input维度为16322020,filter维度为1283233,stride2,pad_left pad_top 0,pad_right pad_bottom 1,outpu…...
训练Pytorch深度学习模型出现StopIteration
训练一个深度学习检测模型,突然出现: 是因为next(batch_iterator),可能迭代器读出来的数据为空。 # load train data# 原先代码images, targets next(batch_iterator)# 更改为:try:images, targets next(batch_iterator)except…...
windows上安装MongoDB,springboot整合MongoDB
上一篇文章已经通过在Ubuntu上安装MongoDB详细介绍了MongoDB的各种命令用法。 Ubuntu上安装、使用MongoDB详细教程https://blog.csdn.net/heyl163_/article/details/133781878 这篇文章介绍一下在windows上安装MongoDB,并通过在springboot项目中使用MongoDB记录用户…...
python_04
37、列表推导式 # 作用:快速生成列表 # 列表变量名 [x for x in range(开始值,结束值,步长) if 条件] # 注意:左闭右开 list1 [i for i in range(0,100)] print(list1) # list1 [i for i in range(0,100)] # print(list1)list…...
音视频视频点播
视频点播是集音视频采集,编辑,上传,自动化转码处理,媒体资源管理,高效云剪辑处理,分发加速,视频播放于一体的一站式音视频点播解决方案 阿里云视频点播基于阿里云强大的基础设施服务,…...
Git常用命令1
1、设置用户签名 ①基本语法: git config --global user.name 用户名 git config --global user.email 邮箱 ②实际操作 ③查询是否设置成功 cat ~/.gitconfig 注:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
华为OD机考-机房布局
import java.util.*;public class DemoTest5 {public static void main(String[] args) {Scanner in new Scanner(System.in);// 注意 hasNext 和 hasNextLine 的区别while (in.hasNextLine()) { // 注意 while 处理多个 caseSystem.out.println(solve(in.nextLine()));}}priv…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
抽象类和接口(全)
一、抽象类 1.概念:如果⼀个类中没有包含⾜够的信息来描绘⼀个具体的对象,这样的类就是抽象类。 像是没有实际⼯作的⽅法,我们可以把它设计成⼀个抽象⽅法,包含抽象⽅法的类我们称为抽象类。 2.语法 在Java中,⼀个类如果被 abs…...
