MySql Explain优化命令使用
MySql Explain优化命令使用
truncate table student // 自增id 从 0 开始
delete from student // 自增id 会保留 , 108
区别: 1:自增id
2:delete 可以恢复
truncate 无法恢复
前言
EXPLAIN 是一个用于获取 S
QL 语句执行计划的命令,用于帮助理解查询的执行过程以及如何优化。这里主要是索引优化

1.准备
truncate table student DROP PROCEDURE IF EXISTS InsertRecords;
CREATE PROCEDURE InsertRecords()
BEGINDECLARE i INT DEFAULT 1;WHILE i <= 100000 DOSET @name = CONCAT('张', i);SET @age = i;INSERT INTO student(name, age) VALUES (@name, @age);SET i = i + 1;END WHILE;
END
SQL



2.2 select_type列
"select_type"列是用来描述查询的类型
下面是常见的"select_type"值及其含义:
-
SIMPLE: 表示查询中不包含子查询或UNION操作符的简单查询。
-
PRIMARY: 表示查询中包含子查询,并且该子查询处于顶层位置。
-
SUBQUERY: 表示查询中的子查询,在FROM子句中被其他查询引用。
-
DERIVED: 表示查询中的派生表,是从子查询结果中创建的临时表。
-
UNION: 表示查询中使用了UNION或UNION ALL操作符进行多个查询结果的合并。
-
UNION RESULT: 表示UNION操作后的结果集。
-
DEPENDENT SUBQUERY: 表示子查询的结果取决于外部查询的值。
-
DEPENDENT UNION: 表示UNION操作的结果取决于外部查询的输入。
-
UNCACHEABLE SUBQUERY: 表示子查询的结果无法被缓存,通常是因为子查询中使用了非确定性函数或用户变量。
-
DEPENDENT UNION RESULT: 表示外部查询对于UNION操作结果的依赖。
2.3 table列
,"table"列用于表示查询所涉及的表或派生表的名称。
下面是"table"列可能出现的不同值及其含义:
-
实际表名:表示查询中直接引用的物理表的名称。
-
表的别名:如果查询中使用了表的别名,那么"table"列将显示该别名。
-
派生表:对于包含子查询的查询,"table"列可能显示一个派生表的名称,表示在查询执行过程中创建的临时表。

2.4 type 列(重点)
"type"列用于表示访问表时所采用的访问类型。
下面是常见的"type"值及其含义:
-
system: 表示只有一行的表,通常是系统表。 -
const: 表示通过索引只能匹配到一行数据。 explain select * from student where id = 1688
-
eq_ref: 表示使用了等值连接(例如,使用主键或唯一索引连接表)。explain SELECT * FROM student s1 JOIN student s2 ON s1.id = s2.id WHERE s1.age = 25;
-
ref: 表示使用了非唯一索引进行查找,并返回匹配的多行或一行数据。 explain select * from student where name = '张68'
-
range: 表示使用了索引进行范围查找,例如使用比较符(>, <, BETWEEN)或IN操作符。 explain select * from student where age < 1688
-
index: 表示全索引扫描,也就是说用了某一个索引的全部, 通常发生在查询使用索引覆盖的情况下。explain select count(*) from student ;explain select sum(age) from student
-
all: 表示全表扫描,即没有使用索引,需要遍历整个表进行查询。 explain select * from student
需要注意的是,"type"列显示的结果是一个逐渐优化的输出,从最好到最差的顺序。尽可能选择更快和更有效的访问方法。
2.5 key列
在MySQL的EXPLAIN查询结果中,"key"列用于表示用于访问表的索引的名称。它显示了优化器选择的用于访问表的索引的名称,或者标识没有使用索引。
下面是"key"列可能出现的不同值及其含义:
-
索引名称:表示使用了具名索引,优化器选择了该索引进行查询。
-
NULL:表示查询没有使用任何索引,即进行了全表扫描

2.6 key_len列
"key_len"列用于表示索引字段的最大长度。它显示了优化器使用的索引字段的最大长度,以字节为单位。
下面是"key_len"列的一些常见值及其含义:
-
固定长度:如果索引字段是固定长度的(如整数、日期等),那么"key_len"列将显示该固定长度。
-
可变长度:如果索引字段是可变长度的(如字符串),那么"key_len"列将显示该字段的最大长度。
"key_len"列的值是根据索引字段和索引类型来计算的。它可以帮助我们了解索引的大小和使用情况。
2.7 ref列
在MySQL的EXPLAIN查询结果中,"ref"列用于表示连接条件所引用的列或常量。它显示了查询中使用的引用,用于连接表或进行进一步的过滤。
下面是"ref"列可能出现的不同值及其含义:
-
列名:表示引用了查询中的某个表的列,通常用于等值连接。
-
常量:表示引用了查询中的一个常量值,用于与表中的列进行匹配。
-
空白:表示没有引用列或常量,通常出现在全表扫描的情况下。
需要注意的是,如果查询中存在多个表连接,"ref"列可能会显示多个列名或常量,以逗号分隔。

2.8 rows列
在MySQL的EXPLAIN查询结果中,"rows"列用于表示优化器估计的扫描或访问的行数。它显示了查询执行过程中预计要处理的行数。
下面是"rows"列的一些常见值及其含义:
-
具体的行数:表示优化器估计的该操作将处理的实际行数。
-
0:表示优化器估计的该操作将不需要扫描或访问任何行。
-
NULL:表示优化器无法提供有关操作计划的行数估计。
"rows"列的值主要基于表的统计信息和查询条件来估计,因此它并不总是准确的。它仅作为一个参考,用于评估查询执行计划的成本和性能。

2.9 filtered列
"filtered"列用于表示查询结果经过表过滤后的预计百分比。它显示了查询条件对表数据的过滤效果。
"filtered"列的值范围从0到1之间,其中1表示所有行都满足查询条件,0表示没有行满足查询条件。
下面是"filtered"列的一些常见值及其含义:
-
具体的百分比:表示优化器估计的满足查询条件的行占总行数的百分比。
-
NULL:表示优化器无法提供有关过滤效果的估计信息。
"filtered"列的值可以帮助我们了解查询条件对表数据的过滤程度。较高的过滤值意味着查询条件对表的过滤效果较好,可以减少进一步处理的数据量。

在上述示例中,"filtered"列的值为100/1000,即0.1。这表示优化器估计查询结果将过滤掉90%的行,仅返回10%的行,这是基于索引"student_age_IDX"和查询条件"age < 1688"的预计过滤效果。
需要注意的是,"filtered"列提供的是优化器的估计信息,并不一定与实际运行时的过滤效果完全一致。实际的过滤效果还受到数据分布和统计信息准确性等因素的影响。
2.10 Extra列
"Extra"列提供了关于执行计划中其他附加信息的说明。该列包含了一些额外的操作、提示和优化器的相关信息。
下面是"Extra"列可能出现的一些常见值及其含义:
-
“Using index”:表示查询通过使用覆盖索引(索引包含了所有查询所需的列)来避免访问表的实际行数据。
-
“Using where”:表示查询需要在返回结果之前进行附加的过滤操作,可能需要在查询过程中进行表的扫描或访问。
-
“Using temporary”:表示查询需要创建一个临时表来处理一些操作(如排序、分组),这可能会增加额外的内存和磁盘开销。
-
“Using filesort”:表示查询需要在内存或磁盘上进行排序操作,这可能会影响性能。
-
“Using join buffer”:表示查询使用了连接缓冲区来处理连接操作,这可以改善连接性能。
-
“Distinct”:表示查询使用了DISTINCT关键字去除重复的行。
-
“Range checked for each record”:表示查询通过索引范围扫描进行过滤,但还需要进一步检查每一行是否满足其他条件。
-
“Full scan on NULL key”:表示查询使用了一个NULL键的索引进行全表扫描。
需要注意的是,"Extra"列的值可能会因查询的具体情况而有所不同,且某些值可能会同时出现。这些值提供了关于查询执行计划的额外信息,有助于我们理解查询的操作、性能和优化情况。
相关文章:
MySql Explain优化命令使用
MySql Explain优化命令使用 truncate table student // 自增id 从 0 开始 delete from student // 自增id 会保留 , 108 区别: 1:自增id 2:delete 可以恢复 truncate 无法恢复 前言 EXPLAIN 是一个用于获取 SQL 语句执行计划的…...
Android NestedScrollView+TabLayout+ViewPager+ 其它布局,ViewPager 不显示以及超出屏幕不显示问题
前言 此场景为 NestedScrollView 嵌套多个布局 ,大致结构为 NestedScrollViewTabLayoutViewPagerfragment 其它View,如下图 , 一、ViewPager 设置高度才会显示内容问题 原因:NestedScrollView 计算高度先于 ViewPager 渲染前,所…...
Linux开机logo设置
本文介绍Linux开机logo设置。 常用的Linux开机logo设置工具有fbi(Linux Framebuffer Imageviewer),plymouth等,本文针对fbi工具进行开机logo设置。 1.fbi工具安装 命令行下,输入: sudo apt-get install fbi -y 安装完毕后&am…...
webpack插件开发 模拟vue系统登录后,获取a标签下的文件
浏览器插件开发中,在webpack插件开发中,模拟Vue系统登录后获取a标签下的文件,可以通过监听某个登录事件,并在事件处理函数中修改Webpack的输出配置来实现。以下是一个简化的示例代码: // 假设有一个插件构造函数 Logi…...
大规模数据处理:分库分表与数据迁移最佳实践
什么是分库分表 分库分表是一种数据库架构优化策略,它将数据分散存储在多个数据库或表中,以此来提高系统的可扩展性和性能。 虽然分库分表能够提升系统的整体性能,但是也不要一上来就分库分表,如果系统在单表的情况下࿰…...
TCP网络编程概述、相关函数、及实现超详解
文章目录 TCP网络编程概述1. TCP协议的特点2. TCP与UDP的差异3. TCP编程流程 TCP网络编程相关函数详解1. socket():创建套接字参数说明:返回值:示例: 2. connect():客户端连接服务器参数说明:返回值&#x…...
Cluade 3.5 Sonnet 提示词泄露
prompt 翻译: The notebook currently demonstrates support for a two agent setup. Support for GroupChat is currently in development....
git clone代码报错Permission denied (publickey)
git clone gerrit SSH的Clone with commit-msg hook代码连接,报错Permission denied (publickey). 一般在C:\Users\用户名.ssh文件夹下有一个id_rsa.pub文件 把文件里的内容复制 到gerrit网站上User Settings的SSH keys里 在New SSH key里粘贴刚刚复制的内容&…...
QT设计中文输入法软键盘DLL给到C#开发步骤
开发目的:本文提供解决触摸屏C#程序中无法输入中文问题,中文拼音采用开源的谷歌输入法程序、使用QT编译中文输入法界面和中文输入法接口给到C#使用。 开发步骤: 1、QT中设计字母和字符输入界面 2、QT中设计数字输入界面 3、QT中封装调用谷歌…...
使用 Rust 和 wasm-pack 开发 WebAssembly 应用
一、什么是 WebAssembly? WebAssembly 是一种运行在现代 Web 浏览器中的新型二进制指令格式。它是一种低级别的字节码,可以被多种语言编译,并在浏览器中高效运行。 1.1 WebAssembly 的背景与概念 高性能计算:WebAssembly 旨在提…...
1. IP地址介绍
IP地址 一、网络概述1、网络类型2、网络组成、传输介质2.1 组成2.2 传输介质 二、IP地址1、IP地址的表示方法2、IP地址的组成3、IP地址的类型3.1 根据IP地址第一个字节大小来分3.1.1 单播地址 Unicast 3.2 根据IP地址的使用 三、子网掩码 netmask1、默认的子网掩码2、判断多个I…...
喜报来袭~又有一波优秀企业选择Smartbi
近期,大金(中国)武汉&广州分公司、中广核智能、新疆银行、四川省人民医院等多家知名企业/机构签约Smartbi,数智化建设再上新高度! Smartbi数10年专注于商业智能BI与大数据分析软件与服务,为各行各业提…...
Web端云剪辑解决方案,BS架构私有化部署,安全可控
传统视频制作流程繁琐、耗时,且对专业设备和软件的高度依赖,常常让企业望而却步,美摄科技凭借其强大的技术实力和创新能力,推出了面向企业用户的Web端云剪辑解决方案,为企业提供一站式、高效、便捷的视频生产平台。 B…...
AI 代码助手插件推荐
AI正在重塑我们的工作方式,软件开发也不例外。AI编码助手使开发人员能够比以往更快、更有效地编写代码。 在本文中,我们将比较几个个最好的AI编码助手,突出它们的独特功能和价格,以帮助读者找到完美的编码伙伴: 1、腾讯云 AI 代…...
word中的表格全部设置宽度100%
1、背景 我们用工具将数据库或其他的数据导出成word时,表格有的会大于100%,超过了边界。word没有提供全局修改的方法。如果我们想改成100%。 一种方式是通过宏,全局改。一种是手动改。 2、宏修改 如果表格多,可以通过这种方式。…...
JFinal整合Websocket
学习笔记,供大家参考 总结的不错的话,记得点赞收藏关注哦!导入JAR包 javax.websocket-api <dependency><groupId>javax.websocket</groupId><artifactId>javax.websocket-api</artifactId><version>1.1&…...
(done) 声音信号处理基础知识(7) (Understanding Time Domain Audio Features)
参考:https://www.youtube.com/watch?vSRrQ_v-OOSg&t1s 时域特征包括: 1.幅度包络 2.均方根能量 3.过零率 振幅包络的定义:一个 frame 里,所有采样点中最大的振幅值 一个形象的关于振幅包络的可视化解释如下:…...
拓数派荣获上海数据交易所“数据治理服务商”认证
近期,杭州拓数派科技发展有限公司(以下简称“拓数派”)荣获上海数据交易所“数据治理服务商”认证,标志着拓数派正式加入上海数据交易所数商生态,成为上海数据交易所官方认证的数据治理服务商。拓数派企业发展部总监吴…...
【Redis】分布式锁之 Redission
一、基于setnx实现的分布式锁问题 重入问题:获得锁的线程应能再次进入相同锁的代码块,可重入锁能防止死锁。例如在HashTable中,方法用synchronized修饰,若在一个方法内调用另一个方法,不可重入会导致死锁。而synchroni…...
对象序列化
Data AllArgsConstructor NoArgsConstructor public class Product implements Serializable {public Long productId;public String productName;public Double productPrice;public String productImg;public Integer productStatus;public String productCategory; }为什么要…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...
多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...
JVM虚拟机:内存结构、垃圾回收、性能优化
1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
