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 注:签名的作用是区分不同操作者身份。用户的签名信息在每一个版本的提交…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

家政维修平台实战20:权限设计
目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色…...

Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...

使用Spring AI和MCP协议构建图片搜索服务
目录 使用Spring AI和MCP协议构建图片搜索服务 引言 技术栈概览 项目架构设计 架构图 服务端开发 1. 创建Spring Boot项目 2. 实现图片搜索工具 3. 配置传输模式 Stdio模式(本地调用) SSE模式(远程调用) 4. 注册工具提…...

FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
OD 算法题 B卷【正整数到Excel编号之间的转换】
文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的:a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...
十九、【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建
【用户管理与权限 - 篇一】后端基础:用户列表与角色模型的初步构建 前言准备工作第一部分:回顾 Django 内置的 `User` 模型第二部分:设计并创建 `Role` 和 `UserProfile` 模型第三部分:创建 Serializers第四部分:创建 ViewSets第五部分:注册 API 路由第六部分:后端初步测…...