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

MySql Explain优化命令使用

MySql Explain优化命令使用

truncate table student // 自增id 从 0 开始

delete from student // 自增id 会保留 , 108

区别: 1:自增id

2:delete 可以恢复

truncate 无法恢复

前言

EXPLAIN 是一个用于获取 SQL 语句执行计划的命令,用于帮助理解查询的执行过程以及如何优化。这里主要是索引优化

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"值及其含义:

  1. SIMPLE: 表示查询中不包含子查询或UNION操作符的简单查询。

  2. PRIMARY: 表示查询中包含子查询,并且该子查询处于顶层位置。

  3. SUBQUERY: 表示查询中的子查询,在FROM子句中被其他查询引用。

  4. DERIVED: 表示查询中的派生表,是从子查询结果中创建的临时表。

  5. UNION: 表示查询中使用了UNION或UNION ALL操作符进行多个查询结果的合并。

  6. UNION RESULT: 表示UNION操作后的结果集。

  7. DEPENDENT SUBQUERY: 表示子查询的结果取决于外部查询的值。

  8. DEPENDENT UNION: 表示UNION操作的结果取决于外部查询的输入。

  9. UNCACHEABLE SUBQUERY: 表示子查询的结果无法被缓存,通常是因为子查询中使用了非确定性函数或用户变量。

  10. DEPENDENT UNION RESULT: 表示外部查询对于UNION操作结果的依赖。

2.3 table列

,"table"列用于表示查询所涉及的表或派生表的名称。

下面是"table"列可能出现的不同值及其含义:

  1. 实际表名:表示查询中直接引用的物理表的名称。

  2. 表的别名:如果查询中使用了表的别名,那么"table"列将显示该别名。

  3. 派生表:对于包含子查询的查询,"table"列可能显示一个派生表的名称,表示在查询执行过程中创建的临时表。

2.4 type 列(重点)

"type"列用于表示访问表时所采用的访问类型。

下面是常见的"type"值及其含义:

  1. system: 表示只有一行的表,通常是系统表。

  2. const: 表示通过索引只能匹配到一行数据。 explain select * from student where id = 1688

  3. eq_ref: 表示使用了等值连接(例如,使用主键或唯一索引连接表)。explain SELECT * FROM student s1 JOIN student s2 ON s1.id = s2.id WHERE s1.age = 25;

  4. ref: 表示使用了非唯一索引进行查找,并返回匹配的多行或一行数据。 explain select * from student where name = '张68'

  5. range: 表示使用了索引进行范围查找,例如使用比较符(>, <, BETWEEN)或IN操作符。 explain select * from student where age < 1688

  6. index: 表示全索引扫描,也就是说用了某一个索引的全部, 通常发生在查询使用索引覆盖的情况下。explain select count(*) from student ;explain select sum(age) from student

  7. all: 表示全表扫描,即没有使用索引,需要遍历整个表进行查询。 explain select * from student

需要注意的是,"type"列显示的结果是一个逐渐优化的输出,从最好到最差的顺序。尽可能选择更快和更有效的访问方法。

2.5 key列

在MySQL的EXPLAIN查询结果中,"key"列用于表示用于访问表的索引的名称。它显示了优化器选择的用于访问表的索引的名称,或者标识没有使用索引。

下面是"key"列可能出现的不同值及其含义:

  1. 索引名称:表示使用了具名索引,优化器选择了该索引进行查询。

  2. NULL:表示查询没有使用任何索引,即进行了全表扫描

2.6 key_len列

"key_len"列用于表示索引字段的最大长度。它显示了优化器使用的索引字段的最大长度,以字节为单位。

下面是"key_len"列的一些常见值及其含义:

  1. 固定长度:如果索引字段是固定长度的(如整数、日期等),那么"key_len"列将显示该固定长度。

  2. 可变长度:如果索引字段是可变长度的(如字符串),那么"key_len"列将显示该字段的最大长度。

"key_len"列的值是根据索引字段和索引类型来计算的。它可以帮助我们了解索引的大小和使用情况。

2.7 ref列

在MySQL的EXPLAIN查询结果中,"ref"列用于表示连接条件所引用的列或常量。它显示了查询中使用的引用,用于连接表或进行进一步的过滤。

下面是"ref"列可能出现的不同值及其含义:

  1. 列名:表示引用了查询中的某个表的列,通常用于等值连接。

  2. 常量:表示引用了查询中的一个常量值,用于与表中的列进行匹配。

  3. 空白:表示没有引用列或常量,通常出现在全表扫描的情况下。

需要注意的是,如果查询中存在多个表连接,"ref"列可能会显示多个列名或常量,以逗号分隔。

2.8 rows列

在MySQL的EXPLAIN查询结果中,"rows"列用于表示优化器估计的扫描或访问的行数。它显示了查询执行过程中预计要处理的行数。

下面是"rows"列的一些常见值及其含义:

  1. 具体的行数:表示优化器估计的该操作将处理的实际行数。

  2. 0:表示优化器估计的该操作将不需要扫描或访问任何行。

  3. NULL:表示优化器无法提供有关操作计划的行数估计。

"rows"列的值主要基于表的统计信息和查询条件来估计,因此它并不总是准确的。它仅作为一个参考,用于评估查询执行计划的成本和性能。

2.9 filtered列

"filtered"列用于表示查询结果经过表过滤后的预计百分比。它显示了查询条件对表数据的过滤效果。

"filtered"列的值范围从0到1之间,其中1表示所有行都满足查询条件,0表示没有行满足查询条件。

下面是"filtered"列的一些常见值及其含义:

  1. 具体的百分比:表示优化器估计的满足查询条件的行占总行数的百分比。

  2. NULL:表示优化器无法提供有关过滤效果的估计信息。

"filtered"列的值可以帮助我们了解查询条件对表数据的过滤程度。较高的过滤值意味着查询条件对表的过滤效果较好,可以减少进一步处理的数据量。

在上述示例中,"filtered"列的值为100/1000,即0.1。这表示优化器估计查询结果将过滤掉90%的行,仅返回10%的行,这是基于索引"student_age_IDX"和查询条件"age < 1688"的预计过滤效果。

需要注意的是,"filtered"列提供的是优化器的估计信息,并不一定与实际运行时的过滤效果完全一致。实际的过滤效果还受到数据分布和统计信息准确性等因素的影响。

2.10 Extra列

"Extra"列提供了关于执行计划中其他附加信息的说明。该列包含了一些额外的操作、提示和优化器的相关信息。

下面是"Extra"列可能出现的一些常见值及其含义:

  1. “Using index”:表示查询通过使用覆盖索引(索引包含了所有查询所需的列)来避免访问表的实际行数据。

  2. “Using where”:表示查询需要在返回结果之前进行附加的过滤操作,可能需要在查询过程中进行表的扫描或访问。

  3. “Using temporary”:表示查询需要创建一个临时表来处理一些操作(如排序、分组),这可能会增加额外的内存和磁盘开销。

  4. “Using filesort”:表示查询需要在内存或磁盘上进行排序操作,这可能会影响性能。

  5. “Using join buffer”:表示查询使用了连接缓冲区来处理连接操作,这可以改善连接性能。

  6. “Distinct”:表示查询使用了DISTINCT关键字去除重复的行。

  7. “Range checked for each record”:表示查询通过索引范围扫描进行过滤,但还需要进一步检查每一行是否满足其他条件。

  8. “Full scan on NULL key”:表示查询使用了一个NULL键的索引进行全表扫描。

需要注意的是,"Extra"列的值可能会因查询的具体情况而有所不同,且某些值可能会同时出现。这些值提供了关于查询执行计划的额外信息,有助于我们理解查询的操作、性能和优化情况。

相关文章:

MySql Explain优化命令使用

MySql Explain优化命令使用 truncate table student // 自增id 从 0 开始 delete from student // 自增id 会保留 &#xff0c; 108 区别&#xff1a; 1&#xff1a;自增id 2&#xff1a;delete 可以恢复 truncate 无法恢复 前言 EXPLAIN 是一个用于获取 SQL 语句执行计划的…...

Android NestedScrollView+TabLayout+ViewPager+ 其它布局,ViewPager 不显示以及超出屏幕不显示问题

前言 此场景为 NestedScrollView 嵌套多个布局 &#xff0c;大致结构为 NestedScrollViewTabLayoutViewPagerfragment 其它View,如下图 &#xff0c; 一、ViewPager 设置高度才会显示内容问题 原因&#xff1a;NestedScrollView 计算高度先于 ViewPager 渲染前&#xff0c;所…...

Linux开机logo设置

本文介绍Linux开机logo设置。 常用的Linux开机logo设置工具有fbi(Linux Framebuffer Imageviewer)&#xff0c;plymouth等&#xff0c;本文针对fbi工具进行开机logo设置。 1.fbi工具安装 命令行下&#xff0c;输入&#xff1a; sudo apt-get install fbi -y 安装完毕后&am…...

webpack插件开发 模拟vue系统登录后,获取a标签下的文件

浏览器插件开发中&#xff0c;在webpack插件开发中&#xff0c;模拟Vue系统登录后获取a标签下的文件&#xff0c;可以通过监听某个登录事件&#xff0c;并在事件处理函数中修改Webpack的输出配置来实现。以下是一个简化的示例代码&#xff1a; // 假设有一个插件构造函数 Logi…...

大规模数据处理:分库分表与数据迁移最佳实践

什么是分库分表 分库分表是一种数据库架构优化策略&#xff0c;它将数据分散存储在多个数据库或表中&#xff0c;以此来提高系统的可扩展性和性能。 虽然分库分表能够提升系统的整体性能&#xff0c;但是也不要一上来就分库分表&#xff0c;如果系统在单表的情况下&#xff0…...

TCP网络编程概述、相关函数、及实现超详解

文章目录 TCP网络编程概述1. TCP协议的特点2. TCP与UDP的差异3. TCP编程流程 TCP网络编程相关函数详解1. socket()&#xff1a;创建套接字参数说明&#xff1a;返回值&#xff1a;示例&#xff1a; 2. connect()&#xff1a;客户端连接服务器参数说明&#xff1a;返回值&#x…...

Cluade 3.5 Sonnet 提示词泄露

prompt 翻译&#xff1a; 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代码连接&#xff0c;报错Permission denied (publickey). 一般在C:\Users\用户名.ssh文件夹下有一个id_rsa.pub文件 把文件里的内容复制 到gerrit网站上User Settings的SSH keys里 在New SSH key里粘贴刚刚复制的内容&…...

QT设计中文输入法软键盘DLL给到C#开发步骤

开发目的&#xff1a;本文提供解决触摸屏C#程序中无法输入中文问题&#xff0c;中文拼音采用开源的谷歌输入法程序、使用QT编译中文输入法界面和中文输入法接口给到C#使用。 开发步骤&#xff1a; 1、QT中设计字母和字符输入界面 2、QT中设计数字输入界面 3、QT中封装调用谷歌…...

使用 Rust 和 wasm-pack 开发 WebAssembly 应用

一、什么是 WebAssembly&#xff1f; WebAssembly 是一种运行在现代 Web 浏览器中的新型二进制指令格式。它是一种低级别的字节码&#xff0c;可以被多种语言编译&#xff0c;并在浏览器中高效运行。 1.1 WebAssembly 的背景与概念 高性能计算&#xff1a;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

近期&#xff0c;大金&#xff08;中国&#xff09;武汉&广州分公司、中广核智能、新疆银行、四川省人民医院等多家知名企业/机构签约Smartbi&#xff0c;数智化建设再上新高度&#xff01; Smartbi数10年专注于商业智能BI与大数据分析软件与服务&#xff0c;为各行各业提…...

Web端云剪辑解决方案,BS架构私有化部署,安全可控

传统视频制作流程繁琐、耗时&#xff0c;且对专业设备和软件的高度依赖&#xff0c;常常让企业望而却步&#xff0c;美摄科技凭借其强大的技术实力和创新能力&#xff0c;推出了面向企业用户的Web端云剪辑解决方案&#xff0c;为企业提供一站式、高效、便捷的视频生产平台。 B…...

AI 代码助手插件推荐

AI正在重塑我们的工作方式&#xff0c;软件开发也不例外。AI编码助手使开发人员能够比以往更快、更有效地编写代码。 在本文中&#xff0c;我们将比较几个个最好的AI编码助手&#xff0c;突出它们的独特功能和价格&#xff0c;以帮助读者找到完美的编码伙伴: 1、腾讯云 AI 代…...

word中的表格全部设置宽度100%

1、背景 我们用工具将数据库或其他的数据导出成word时&#xff0c;表格有的会大于100%&#xff0c;超过了边界。word没有提供全局修改的方法。如果我们想改成100%。 一种方式是通过宏&#xff0c;全局改。一种是手动改。 2、宏修改 如果表格多&#xff0c;可以通过这种方式。…...

JFinal整合Websocket

学习笔记&#xff0c;供大家参考 总结的不错的话&#xff0c;记得点赞收藏关注哦&#xff01;导入JAR包 javax.websocket-api <dependency><groupId>javax.websocket</groupId><artifactId>javax.websocket-api</artifactId><version>1.1&…...

(done) 声音信号处理基础知识(7) (Understanding Time Domain Audio Features)

参考&#xff1a;https://www.youtube.com/watch?vSRrQ_v-OOSg&t1s 时域特征包括&#xff1a; 1.幅度包络 2.均方根能量 3.过零率 振幅包络的定义&#xff1a;一个 frame 里&#xff0c;所有采样点中最大的振幅值 一个形象的关于振幅包络的可视化解释如下&#xff1a;…...

拓数派荣获上海数据交易所“数据治理服务商”认证

近期&#xff0c;杭州拓数派科技发展有限公司&#xff08;以下简称“拓数派”&#xff09;荣获上海数据交易所“数据治理服务商”认证&#xff0c;标志着拓数派正式加入上海数据交易所数商生态&#xff0c;成为上海数据交易所官方认证的数据治理服务商。拓数派企业发展部总监吴…...

【Redis】分布式锁之 Redission

一、基于setnx实现的分布式锁问题 重入问题&#xff1a;获得锁的线程应能再次进入相同锁的代码块&#xff0c;可重入锁能防止死锁。例如在HashTable中&#xff0c;方法用synchronized修饰&#xff0c;若在一个方法内调用另一个方法&#xff0c;不可重入会导致死锁。而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; }为什么要…...

什么是专利开放许可?

专利作为技术创新的重要载体&#xff0c;其有效转化与应用成为推动社会进步和经济发展的关键力量。那么&#xff0c;专利开放许可究竟是何方神圣&#xff1f;它如何打破传统专利许可的壁垒&#xff0c;促进创新资源的广泛共享&#xff1f; 专利开放许可的定义 专利开放许可&am…...

地表最强开源大模型!Llama 3.2,如何让你的手机变身私人智能助理

你有没有想过&#xff0c;为什么现在的手机越来越像小型电脑&#xff1f;无论是拍照、看视频&#xff0c;还是用各种APP&#xff0c;甚至是AI助手&#xff0c;手机的功能几乎无所不能。其实&#xff0c;这一切的背后有一个技术正在悄悄改变我们的生活&#xff0c;那就是Llama 3…...

Pandas中DataFrame表格型数据结构

目录 1、DataFrame是什么2、创建一个dataframe3、获取dataframe的行、列索引4、获取dataframe的值 1、DataFrame是什么 series是有一组数据与一组索引&#xff08;行索引&#xff09;组成的数据结构&#xff0c;而dataframe是由一组数据与一对索引&#xff08;行索引和列索引&…...

C++的智能指针

很久之前&#xff0c;我们说到了new和delete关键字。 new在堆上分配内存&#xff0c;需要delete来删除内存、释放内存&#xff0c;因为它不会自动释放内存。 智能指针是实现过程自动化的一种方式&#xff0c;即当我们调用new时&#xff0c;我们不需要调用delete关键字。 在很…...

微信小程序showLoading ,showToast ,hideLoading连续调用出现showLoading 不关闭的情况记录

wx.showLoading({title: "操作中",mask: true,});api().then(() > {wx.showToast({title: "操作成功",icon: "none",});}).finally(() > {wx.hideLoading();}); 类似的代码偶尔会出现showLoading不关闭的现象, 这种情况下的解决方法就是 …...

OpenFeign使用详解

什么是OpenFeign&#xff1f; OpenFeign 是一个声明式的 HTTP 客户端&#xff0c;旨在简化微服务架构中不同服务之间的 HTTP 调用。它通过集成 Ribbon 实现了客户端负载均衡&#xff0c;并且能够与 Eureka、Consul 等服务发现组件无缝对接。使用 OpenFeign&#xff0c;开发者只…...

CSS clip-path 属性的使用

今天记录一个css属性clip-path&#xff0c;首先介绍下这个属性。 clip-path 是CSS中的一个神奇属性&#xff0c;它能够让你像魔术师一样&#xff0c;对网页元素施展“裁剪魔法”——只展示元素的一部分&#xff0c;隐藏其余部分。想象一下&#xff0c;不用依赖图片编辑软件&am…...

PHP 函数

PHP 函数 PHP&#xff08;超文本预处理器&#xff09;是一种广泛使用的开源服务器端脚本语言&#xff0c;特别适合于网页开发。在PHP中&#xff0c;函数是一段可重复使用的代码&#xff0c;用于执行特定任务。它们是PHP编程的核心组成部分&#xff0c;有助于模块化代码&#x…...

NCEloss与InfoNCEloss的区别

NCE Loss&#xff08;Noise Contrastive Estimation Loss&#xff09;和 InfoNCE Loss 是两种常用的损失函数&#xff0c;主要应用在对比学习和自监督学习任务中。它们的区别在于应用场景和具体实现细节。下面是对两者的详细比较&#xff1a; 1. NCE Loss&#xff08;Noise Co…...

高通Android 12 push framework.jar和service.jar

1、Android framework.jar和service.jar替换注意事项 2、单编 adb push service.jar脚本 如下 adb root adb disable-verity adb remountadb push services.jar system/framework adb push services.jar.prof system/framework adb push oat/arm64/services.art /system/fram…...