当前位置: 首页 > news >正文

mysql explain分析

目录

思维导图

id

select_type

SIMPLE

PRIMARY

SUBQUERY

DEPENDENT SUBQUREY

UNCACHEABLE SUBQUREY:

UNION

UNION RESULT

DERIVED

MATERIALIZED

table

partitions

type

ALL

index

range

ref

eq_ref

const

system

possible_keys

keys

key_len

ref

rows

filtered

Extra


思维导图

序号

列名

列名注释

1

字段

含义

2

id

操作标识符,从 1 开始递增。

3

select_type

查询类型,例如 SIMPLE、PRIMARY、SUBQUERY 等等。

4

table

操作的表名。

5

partitions

操作的分区。

6

type

操作的连接类型,例如 const、eq_ref、ref、range、index、ALL 等等。

7

possible_keys

操作可能使用的索引。

8

key

操作实际使用的索引。

9

key_len

操作使用的索引的长度。

10

ref

操作使用的索引的参考。

11

rows

操作返回的行数的估计值。

12

filtered

操作返回的行的过滤率。

Extra

操作的额外信息,例如 Using where、Using index 等等。

id

表示查询中执行select子句或操作表的顺序,

id相同:执行顺序由上至下。

id不同:如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行。

id为NULL:最后执行。

id号每个号码,表示一趟独立的查询, 一个sql的查询趟数越少越好。

select_type

查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询。

SIMPLE

简单查询。查询中不包含子查询或者UNION。

PRIMARY

主查询。查询中若包含子查询,则最外层查询被标记为PRIMARY。

SUBQUERY

子查询。在SELECT或WHERE列表中包含了子查询。

SQL示例:

EXPLAIN SELECT * FROM t3 WHERE id = ( SELECT id FROM t2 WHERE content= 'a');

DEPENDENT SUBQUREY

如果包含了子查询,并且查询语句不能被优化器转换为连接查询,并

且子查询是 相关子查询(子查询基于外部数据列) ,则子查询就是DEPENDENT SUBQUREY。

SQL示例:

EXPLAIN SELECT * FROM t3 WHERE id = ( SELECT id FROM t2 WHERE content = t3.content);

UNCACHEABLE SUBQUREY:

表示这个subquery的查询要受到外部系统变量的影响

UNION

对于包含UNION或者UNION ALL的查询语句,除了最左边的查询是PRIMARY,其余的查

询都是UNION。

UNION RESULT

UNION会对查询结果进行查询去重,MYSQL会使用临时表来完成UNION查询

的去重工作,针对这个临时表的查询就是"UNION RESULT"。

EXPLAIN SELECT * FROM t3 WHERE id = 1 UNION SELECT * FROM t2 WHERE id = 1;

DERIVED

在包含 派生表(子查询在from子句中) 的查询中,MySQL会递归执行这些子查询,把结果放在临时表里。

EXPLAIN SELECT * FROM ( SELECT content, COUNT(*) AS c FROM t1 GROUP BY content ) AS derived_t1 WHERE c > 1;

这里的 就是在id为2的查询中产生的派生表。

补充:MySQL在处理带有派生表的语句时,优先尝试把派生表和外层查询进行合并,如果不行,再把派

生表物化掉(执行子查询,并把结果放入临时表),然后执行查询。下面的例子就是就是将派生表和外层查

询进行合并的例子:

EXPLAIN SELECT*FROM(SELECT*FROMt1WHEREcontent='t1_832')ASderived_t1;

MATERIALIZED

优化器对于包含子查询的语句,如果选择将子查询物化后再与外层查询连接查询,

该子查询的类型就是MATERIALIZED。如下的例子中,查询优化器先将子查询转换成物化表,然后

将t1和物化表进行连接查询。

EXPLAIN SELECT*FROM t1 WHERE content IN(SELECT content FROM t2);

table

单表:显示这一行的数据是关于哪张表的

EXPLAIN SELECT * FROM t1;

多表关联:t1为驱动表,t2为被驱动表。

注意:内连接时,MySQL性能优化器会自动判断哪个表是驱动表,哪个表示被驱动表,和书写的顺序无

EXPLAIN SELECT * FROM t1 INNER JOIN t2;

partitions

代表分区表中的命中情况,非分区表,该项为NULL

type

此列表示关联类型或访问类型。也就是MySQL决定如何查找表中的行。依次从最优到最差分别为:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery> index_subquery > range > index > all

比较重要的system > const > eq_ref > ref > range > index > all。

SQL 性能优化的目标:至少要达到里巴巴开发手册要求 至少要达到range级别,要求是ref级别,最好是const级别

ALL

全表扫描。Full Table Scan,将遍历全表以找到匹配的行。

index

扫描全部索引获取到结果。

覆盖索引:如果能通过读取索引就可以得到想要的数据,那就不需要读取用户记录,或者不用再做回表

操作了。一个索引包含了满足查询结果的数据就叫做覆盖索引。

range

通常出现在范围查询中,比如in、between、大于、小于等。使用索引来检索给定范围的行。这种范围扫描索引扫描比全表扫描要好,

因为它只需要开始于索引的某一点,而结束于另一点,不用扫描全部索引。

ref

不使用唯一索引,而是使用普通索引或者唯一索引的部分前缀,索引和某个值比较,会找到多个符合条件的行。

eq_ref

主键或者不允许NULL值的唯一键索引被连接使用,最多只会返回一条符合条件的记录。简单的select查询不会出现这种type。

const

根据主键或者唯一二级索引列与常数进行匹配时

system

MyISAM引擎中,当表中只有一条记录时。

possible_keys

possible_keys表示执行查询时可能用到的索引,一个或多个。查询涉及到的字段上若存在索

引,则该索引将被列出,但不一定被查询实际使用。

keys

表示实际使用的索引。如果为NULL,则没有使用索引。

key_len

表示索引使用的字节数,根据这个值可以判断索引的使用情况,检查是否充分利用了索引,针对联合索引值

越大越好。

ref

显示与key中的索引进行比较的列或常量。

rows

MySQL认为它执行查询时必须检查的行数。值越小越好。

filtered

最后查询出来的数据占所有服务器端检查行数(rows)的百分比。值越大越好。

Extra

包含不适合在其他列中显示但十分重要的额外信息。通过这些额外信息来理解MySQL到底将如何执行当前

的查询语句。MySQL提供的额外信息有好几十个,这里只挑介绍比较重要的介绍。

Impossible WHERE:where子句的值总是false

Using where:使用了where,但在where上有字段没有创建索引

Using temporary:使了用临时表保存中间结果

Using filesort:在对查询结果中的记录进行排序时,是可以使用索引的

Using index:使用了覆盖索引,表示直接访问索引就足够获取到所需要的数据,不需要通过索引

回表

Using index condition:叫作Index Condition Push down Optimization(索引下推优化)

如果没有使用索引下推(ICP):那么MySQL在存储引擎层找到满足content1>'z'条件的第一

条二级索引记录。主键值进行回表,返回完整的记录给server层,server层再判断其他的搜索

条件是否成立。如果成立则保留该记录,否则跳过该记录,然后向存储引擎层要下一条记录。

如果使用了索引下推(ICP):那么MySQL在存储引擎层找到满足content1>'z'条件的第

一条二级索引记录。不着急执行回表,而是在这条记录上先判断一下所有关于idx_content1

索引中包含的条件是否成立,也就是content1>'z'ANDcontent1LIKE'%a'是否成

立。如果这些条件不成立,则直接跳过该二级索引记录,去找下一条二级索引记录;如果这些

条件成立,则执行回表操作,返回完整的记录给server层。

相关文章:

mysql explain分析

目录 思维导图 id select_type SIMPLE PRIMARY SUBQUERY DEPENDENT SUBQUREY UNCACHEABLE SUBQUREY: UNION UNION RESULT DERIVED MATERIALIZED table partitions type ALL index range ref eq_ref const system possible_keys keys key_l…...

[论文笔记]Circle Loss: A Unified Perspective of Pair Similarity Optimization

引言 为了理解CoSENT的loss,今天来读一下Circle Loss: A Unified Perspective of Pair Similarity Optimization。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 这篇论文从对深度特征学习的成对相似度优化角度出发,旨在最大化同类之间…...

Windows .NET8 实现 远程一键部署,几秒完成发布,提高效率 - CICD

1. 前言 场景 (工作环境 一键部署 到 远端服务器 [阿里云]) CICD 基本步骤回顾 https://blog.csdn.net/CsethCRM/article/details/141604638 2. 环境准备 服务器端IP:106.15.74.25(阿里云服务器) 客户端&#xff1…...

echarts 水平柱图 科技风

var category [{ name: "管控", value: 2500 }, { name: "集中式", value: 8000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 }, { name: "纳管", value: 3000 } ]; // 类别 var total 10000; // 数据…...

标准IO与系统IO

概念区别 标准IO:(libc提供) fopen fread fwrite 系统IO:(linux系统提供) open read write 操作效率 因为内存与磁盘的执行效率不同 系统IO: 把数据从内存直接写到磁盘上 标准IO&#xff…...

【conda】Conda 环境迁移指南:如何更改 envs_dirs 和 pkgs_dirs 以及跨盘迁移

目录 迁移概述一、conda 配置文件1.1 安装 Conda 后的默认目录设置1.2 查看当前 .condarc 配置 二、更改 Conda 的 envs_dirs 和 pkgs_dirs 设置2.1 使用 conda config 命令Windows 和 Linux 系统 2.2 手动编辑 .condarc 文件Windows 系统Linux 系统 2.3 验证设置 三、迁移 Con…...

脏页写入磁盘的过程详解

脏页写入磁盘的过程 一、引言 在数据库系统中,脏页是指那些被修改过但还未写入磁盘的数据页。为了保证数据的一致性和持久性,数据库系统需要在适当的时候将脏页写入磁盘。了解脏页写入磁盘的过程对于理解数据库的内部工作机制和优化性能至关重要。 二、触发脏页写入的条件…...

数据结构——单链表实现和注释浅解

关于单链表的基础部分增删查改的实现和一点理解&#xff0c;写在注释里~ SList.h #pragma once #include<stdio.h> #include<stdlib.h> #include<assert.h>//定义节点的结构 //数据 指向下一个节点的指针 typedef int SLTDataType;typedef struct SListNo…...

滑动窗口系列(同向双指针)/9.7

新的解题思路 一、三数之和的多种可能 给定一个整数数组 arr &#xff0c;以及一个整数 target 作为目标值&#xff0c;返回满足 i < j < k 且 arr[i] arr[j] arr[k] target 的元组 i, j, k 的数量。 由于结果会非常大&#xff0c;请返回 109 7 的模。 输入&…...

C# 窗体中Control以及Invalidate,Update,Refresh三种重绘方法的区别

在 C# 中&#xff0c;Control 类是 Windows Forms 应用程序中所有控件的基类。它提供了控件的基本功能和属性&#xff0c;这些功能和属性被所有继承自 Control 类的子类所共享。这意味着 Control 类是构建 Windows Forms 应用程序中用户界面元素的基础。 以下是 Control 类的一…...

缓存类型以及读写策略

缓存&#xff08;Cache&#xff09;是一种高效的数据存储技术&#xff0c;旨在提高数据访问速度。 它将频繁访问或最近使用的数据临时存储在更快速但较小的存储介质&#xff08;如内存&#xff09;中&#xff0c;以减少从较慢的存储设备&#xff08;如硬盘或远程服务器&#x…...

自动驾驶---Motion Planning之轨迹拼接

1 背景 笔者在之前的专栏中已经详细讲解了自动驾驶Planning模块的内容&#xff1a;包括行车的Behavior Planning和Motion Planning&#xff0c;以及低速记忆泊车的Planning。 本篇博客主要聊一聊Motion Planning中轨迹拼接的相关内容。从网络上各大品牌的车主拍摄的智驾视频来看…...

没资料的屏幕怎么点亮?思路分享

这次尝试调通一个没资料的屏幕&#xff0c;型号是HYT13264&#xff0c;这个是淘宝上面的老王2.9元屏&#xff0c;成色很好但是长期库存没有资料和代码能点亮&#xff0c;仅仅只有一个引脚定义。这里我使用Arduino Nano作为控制器尝试点亮这个模块。 首先&#xff0c;已知别人找…...

通信工程学习:什么是FEC前向纠错

FEC&#xff1a;前向纠错 FEC&#xff08;Forward Error Correction&#xff0c;前向纠错&#xff09;是一种增加数据通信可信度的技术&#xff0c;广泛应用于计算机网络、无线通信、卫星通信等多种数据传输场景中。其基本原理和特点可以归纳如下&#xff1a; 一、FEC前向纠错…...

【机器人工具箱Robotics Toolbox开发笔记(二十)】机器人工具箱SerialLink I类函数参数说明

机器人工具箱中的SerialLink表示串联机器人型机器人的具体类。该类使用D-H参数描述,每个关节一组。SerialLink I类包含的参数如表1所示。 表1 SerialLink I类参数 参 数 意 义 参 数 意 义 plot 显示机器人的图形表示 jacobn 工具坐标系中的雅可比矩阵 plot3D 显示机…...

单调栈的实现

这是C算法基础-数据结构专栏的第二十四篇文章&#xff0c;专栏详情请见此处。 引入 单调栈就是满足单调性的栈结构&#xff0c;它最经典的应用就是给定一个序列&#xff0c;找出每个数左边离它最近的比它大/小的数。 下面我们就来讲单调栈的实现。 定义 单调栈就是满足单调性…...

ffmpeg的安装和使用教程

在Linux上安装和使用FFmpeg可以方便地完成音视频的编码、解码、转码等操作。以下是详细的安装和使用教程。 安装FFmpeg FFmpeg的安装方法会因为不同的Linux发行版有所不同。下面是几种常见的安装方法&#xff1a; Ubuntu/Debian 打开终端&#xff0c;更新包列表并安装FFmpe…...

从计组中从重温C中浮点数表示及C程序翻译过程

目录 移码​编辑 传统浮点表示格式 浮点数的存储&#xff08;ieee 754&#xff09;->修炼内功 例子&#xff1a; ​编辑 浮点数取的过程 C程序翻译过程 移码 传统浮点表示格式 浮点数的存储&#xff08;ieee 754&#xff09;->修炼内功 根据国际标准IEEE&#xff0…...

MySQL常用函数(总结)详细版

1. 字符串函数 CONCAT(str1, str2, ...)&#xff1a;将多个字符串连接成一个字符串。 SELECT CONCAT(Hello, , World); LENGTH(str)&#xff1a;返回字符串的长度&#xff08;字节数&#xff09;。 SELECT LENGTH(Hello); SUBSTRING(str, pos, len)&#xff1a;从字符串 …...

学习记录——day41 C++ 类的静态成员 static

静态成员&#xff0c;是类中不依赖于类对象而独立存在的成员变量&#xff0c;但仍然属于类&#xff0c;是成员的一种 静态成员的空间分配发生在出现编译阶段&#xff0c;不占用类的空间 静态成员分为&#xff0c;静态成员变量和静态成员函数 静态成员变量 1、相关概念 1&…...

DeepAnalyze数据结构优化:提升大规模数据处理性能

DeepAnalyze数据结构优化&#xff1a;提升大规模数据处理性能 1. 引言 当你面对几十GB甚至TB级别的数据集时&#xff0c;是不是经常遇到处理速度慢、内存占用高的问题&#xff1f;DeepAnalyze作为一款强大的AI数据分析工具&#xff0c;在处理大规模数据时&#xff0c;数据结构…...

WarcraftHelper技术适配方案:让经典RTS游戏重获现代硬件支持

WarcraftHelper技术适配方案&#xff1a;让经典RTS游戏重获现代硬件支持 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 痛点解析&#xff1a;魔兽争霸…...

镜像视界|AI智能体驱动的无感定位系统:从识别到控制的跃迁副标题:融合行为建模与轨迹预测的空间级目标管理体系

镜像视界&#xff5c;AI智能体驱动的无感定位系统&#xff1a;从识别到控制的跃迁——融合行为建模与轨迹预测的空间级目标管理体系一、范式升级&#xff1a;AI正在从“工具”进化为“智能体”在传统视频与AI系统中&#xff0c;人工智能的角色长期被定义为“工具”&#xff1a;…...

2026届毕业生推荐的六大AI辅助论文助手解析与推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 鉴于“降ai”所表达的意思不清晰确切&#xff0c;猜测围绕这一主题或许是在探究关于AI的热度…...

5步构建专业视频工作流:OBS虚拟摄像头在macOS上的全面应用

5步构建专业视频工作流&#xff1a;OBS虚拟摄像头在macOS上的全面应用 【免费下载链接】obs-mac-virtualcam ARCHIVED! This plugin is officially a part of OBS as of version 26.1. See note below for info on upgrading. &#x1f389;&#x1f389;&#x1f389;Creates …...

串口通讯参数设置全解析:从波特率到流控制的完整配置流程

串口通讯参数设置全解析&#xff1a;从波特率到流控制的完整配置流程 在嵌入式系统和硬件调试领域&#xff0c;串口通讯就像设备间的"普通话"&#xff0c;而参数配置则是确保双方能顺畅交流的语法规则。想象一下&#xff0c;当你需要让树莓派与传感器"对话&quo…...

PathOfBuilding架构深度解析:流放之路离线构建规划器的技术实现方案

PathOfBuilding架构深度解析&#xff1a;流放之路离线构建规划器的技术实现方案 【免费下载链接】PathOfBuilding Offline build planner for Path of Exile. 项目地址: https://gitcode.com/GitHub_Trending/pa/PathOfBuilding PathOfBuilding是《流放之路》最权威的离…...

MoltenVK终极指南:动态库与静态库的完整选择方案

MoltenVK终极指南&#xff1a;动态库与静态库的完整选择方案 【免费下载链接】MoltenVK MoltenVK is a Vulkan Portability implementation. It layers a subset of the high-performance, industry-standard Vulkan graphics and compute API over Apples Metal graphics fram…...

FireRedASR-AED-L从零开始教程:无需Python环境,镜像开箱即用识别中英混合语音

FireRedASR-AED-L从零开始教程&#xff1a;无需Python环境&#xff0c;镜像开箱即用识别中英混合语音 你是不是经常遇到这样的场景&#xff1f;手头有一段重要的会议录音&#xff0c;里面既有中文讨论&#xff0c;又夹杂着几个英文专业术语&#xff0c;想把它转成文字却找不到…...

DeepSeek-OCR-2应用实战:快速提取发票信息,财务效率翻倍

DeepSeek-OCR-2应用实战&#xff1a;快速提取发票信息&#xff0c;财务效率翻倍 1. 财务人的痛点&#xff1a;发票处理的效率黑洞 每个月末&#xff0c;财务部门总要面对这样的场景&#xff1a; 堆积如山的纸质发票需要手工录入电子发票PDF需要逐个打开复制粘贴关键信息&…...