【MySQL】explain 执行计划各字段解析

MySQL 如何读写数据?icon-default.png?t=N7T8https://blog.csdn.net/weixin_43551213/article/details/140862538

MySQL 索引icon-default.png?t=N7T8https://blog.csdn.net/weixin_43551213/article/details/140847916

在上一篇文章中提到了索引,而添加索引是优化 SQL 语句的一个方式,但是什么时候需要添加索引呢?

在 mysql 可以使用 explain 关键字查看 sql 语句的执行计划,而根据执行计划便可以制定对应的优化方案

首先,我们先执行以下 sql 语句:

EXPLAIN SELECT * FROM product WHERE productId = "81301125340733440"

 可以看出,在结果中有多个字段,接下来就对一些关键字段进行解析:

字段format=json时的名称说明
idselect_id该语句的唯一标识
select_type/查询类型
tabletable_name表名
partitionspartitions匹配的分区
typeaccess_type联接类型
possible_keyspossible_type可能的索引选择
keykey实际选择的索引
key_lenkey_length索引的长度
refref索引的哪一列被引用了
rowsrows估计要扫描的行数
filteredfiltered符合查询条件的数据百分比
Extra/附加信息

id 字段


id 表示执行 select 查询语句的序号,它是 sql 执行的顺序的标识,sql 按照 id 从大到小执行,id 相同的为一组,从上到下执行。

type 字段


type 字段表示的 sql 关联的类型或者说是访问的类型。

从这个字段中我们可以确定这条sql查找数据库表的时候,查找记录的大概范围是怎么样的,直接就能体现sql的效率问题。

type 字段的类型也是有比较多,主要常见掌握的有以下几个:system、const 、eq_ref 、ref 、range 、index 、ALL。

它的性能体现是从高到低。system > const > eq_ref > ref > range > index > ALL

类型说明
systemsystem 是 const 的特例,「表示表中只有一行记录」
constconst 表示通过索引一次就查找到了数据,一般 const 出现在「唯一索引或者主键索引中使用等值查询」,因为表中只有一条数据匹配,所以查找的速度很快
eq_refeq_ref表示「使用唯一索引或者主键索引扫描作为表链接匹配条件,对于每一个索引键,表中只有一条记录与之匹配」
refref性能比eq_ref差,「也表示表的链接匹配条件,也就是使用哪些表字段作为查询索引列上的值」
rangerange「使用索引来检索给定范围的行数据,一般是在 where 后面使用 between、<>、in 等查询语句就会出现 range」
index「index表示会遍历索引树」,index 会比 ALL 速度快一些,但是出现 index 说明需要检查自己的索引是否使用正确
ALL「ALL 与 index 的区别就是 ALL 是从硬盘中读取,而 index 是从索引文件中读取」,ALL 全表扫描意味着 Mysql 会从表的头到尾进行扫描,这时候表示通常需要增加索引来进行优化了,或者说是查询中并没有使用索引作为条件进行查询

ref 与 eq_ref 的区别就是:

  • eq_ref 使用的是唯一索引或者主键索引
  • ref 扫描后的结果可能会找到多条符合条件的行数据,本质上是一种索引访问,返回匹配的行

Extra 字段


该字段显示的是 sql 查询的额外信息,主要有以下几种情况:

Using index、Using where、Using temporary、Using temporary、Using join buffer、Impossible where、Select tables optimized away 

Using index

表示查询的列被索引覆盖,这个是查询性能比较高的体现,即所要查询的信息搜在索引里面可以得到,不用回表,索引被正确的使用

假如同时出现了using where,表示索引用于执行索引键值的查找;若是没有出现using where,则表示索引用于读取数据,而非执行查询的动作。

Using index condition

表示只用到了索引下推的条件。即在组合索引中涵盖的列中覆盖了搜索条件,那么会在筛选出来前先用条件过滤一遍,再去回表,减少回表次数

Using where

该属性与 Using index 相反,查询的列并没有被索引覆盖,where 条件后面使用的是非索引的前导列,它仅仅是使用了 where 条件而已

Using temporary

Using temporary 表示使用了临时表存储中间的结果,一般在对结果排序的时候会使用临时表

Using filesort 

Using filesort 表示文件排序,说明 Mysql 对数据使用了外部的索引进行排序,并没有使用表中的索引进行排序 

Using join buffer

Using join buffer 表示使用连接缓存

它强调在获取连接条件时,并没有使用索引,而是使用连接缓冲区来存储中间结果,若是出现该值,一般说明需要添加索引来进行优化了 

Select tables optimized away

表示 select 语句没有遍历表或者索引就返回数据了

 一  叶  知  秋,奥  妙  玄  心

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/401963.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络——运输层(进程之间的通信、运输层端口,UDP与TCP、TCP详解)

运输层协议概述 进程之间的通信 运输层向它上面的应用层提供通信服务。 当网络边缘部分的两台主机使用网络核心部分的功能进行端到端的通信时&#xff0c;都要使用协议栈中的运输层&#xff1b;而网络核心部分中的路由器在转发分组时只用到下三层的功能。 Q1&#xff1a;我们…

mysql windows安装与远程连接配置

安装包在主页资源中 一、安装(此安装教程为“mysql-installer-community-5.7.41.0.msi”安装教程&#xff0c;安装到win10环境) 保持默认选项&#xff0c;点击”Next“。 点开第一行加号展开一路展开找到“MySQL Server 5,7,41 - X64”点击选中点击一下中间只想右侧的箭头看到…

Attention注意力机制

神经网络注意力机制代码实现 import torch import torch.nn as nn import torch.nn.functional as F# MyAtt类实现思路分析 # 1 init函数 (self, query_size, key_size, value_size1, value_size2, output_size) # 准备2个线性层 注意力权重分布self.attn 注意力结果表示按照指…

简单测试AOP五种增强执行时机

1. 目标方法类&#xff0c;spring代理bean Component public class Test {public void test(){System.out.println("test 目标方法");}public void testException(){throw new RuntimeException();} } 2. 配置类 Configuration ComponentScan EnableAspectJAutoPr…

unity项目打包为webgl后应用于vue项目中(iframe模式)的数据交互

参考文章&#xff1a; 1.Unity打包WebGL: 导入Vue 2.unity文档-WebGL&#xff1a;与浏览器脚本交互 3.unity与vue交互(无第三方插件&#xff09; 目录 一、前期工作1.新建.jslib文件2.新建.cs脚本3. 新建一个Text对象和button按钮对象4.添加脚本空对象UIEvent5.导出unity为w…

Windows配置开机直达桌面并跳过锁屏登录界面在 Windows 10 中添加在启动时自动运行的应用

目录 Win10开机直达桌面并跳过锁屏登录界面修改组策略修改注册表跳过登录界面 在 Windows 10 中添加在启动时自动运行的应用设置系统级别服务一、Windows下使用sc将应用程序设置为系统服务1. 什么是sc命令&#xff1f;2. sc命令的基本语法3. 创建Windows服务的步骤与示例创建服…

CANoe软件中Trace窗口的筛选栏标题不显示(空白)的解决方法

文章目录 问题描述原因分析解决方案扩展知识总结问题描述 不知道什么情况,CANoe软件中Trace窗口的筛选栏标题突然不显示了,一片空白。现象如下: 虽然不影响CANoe软件的使用,但是观感上非常难受,对于强迫症患者非常不友好。 原因分析 按照常规思路,尝试了: 1、重启CAN…

K8S中使用英伟达GPU —— 筑梦之路

前提条件 根据不同的操作系统&#xff0c;安装好显卡驱动&#xff0c;并能正常识别出来显卡&#xff0c;比如如下截图&#xff1a; GPU容器创建流程 containerd --> containerd-shim--> nvidia-container-runtime --> nvidia-container-runtime-hook --> libnvid…

MoExtend: 模态和任务扩展调整的新专家

MoExtend: Tuning New Experts for Modality and Task Extension GitHub - zhongshsh/MoExtend: ACL 2024 (SRW) https://arxiv.org/pdf/2408.03511 大型语言模型&#xff08;LLM&#xff09;在各种任务中表现出色&#xff0c;然而其应用范围受限于主要在文本数据上进行训练。…

【vSphere 7/8】深入浅出 vSphere 证书 Ⅰ—— 初识和了解 vSphere证书

目录 引子1. vCenter Server 证书服务1.1 vSphere 安全证书&#xff08;1&#xff09;vSphere 安全证书的类型和有效期 1.2在 vSphere Client 中初识 vSphere 证书&#xff08;1&#xff09;vCenter 8.0.3 的 vSphere Client 界面&#xff08;2&#xff09;vCenter Server 7.0 …

TCP/UDP实现网络通信

TCP实现网络通信 1.服务端 #include<myhead.h>//1服务端定义:端口号\id号 #define SER_PIPR 6666 #define SER_IP "196.168.111.186" //通过ifconfig查看ip int main(int argc, const char *argv[]) {//1创建套接字int sfd socket(AF_INET,SOCK_STREAM,0);…

深度解析Edge SCDN与CDN:安全加速,全面防护

在现代互联网应用中&#xff0c;CDN已成为提高网站和应用性能不可或缺的技术之一。然而&#xff0c;随着网络安全威胁的日益严峻&#xff0c;单纯依靠CDN提供的加速服务已经不足以满足企业的安全需求。因此&#xff0c;Edge SCDN出现了&#xff0c;它不仅具备CDN的加速特性&…

解锁客户增长新密码:“老带新”策略的深度剖析与实战指南

客户推荐是什么&#xff0c;为何那么重要&#xff1f; 客户推荐是指满意的客户自愿地将其认为优质的产品或服务推荐给他们的社交网络成员&#xff0c;如朋友、家人或同事&#xff0c;这种推荐行为可以是自发的口碑传播&#xff0c;也可以是通过产品方推出的“老带新”奖励计划来…

OpenCV图像滤波(12)图像金字塔处理函数pyrDown()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 函数主要是对图像进行模糊处理并将其降采样。 默认情况下&#xff0c;输出图像的大小计算为 Size((src.cols1)/2, (src.rows1)/2)&#xff0c;但…

汽车维修预约服务系统的设计与实现

TOC springboot317汽车维修预约服务系统的设计与实现 第1章 绪论 1.1选题动因 当前的网络技术&#xff0c;软件技术等都具备成熟的理论基础&#xff0c;市场上也出现各种技术开发的软件&#xff0c;这些软件都被用于各个领域&#xff0c;包括生活和工作的领域。随着电脑和笔…

【大模型】多模态的原理简述

多模态的原理 多模态模型目前基本就是文生图、图生图、图生视频、文生视频这些&#xff0c;其底层逻辑其实还是先从生图片这一源头。因为毕竟视频也是若干帧的图片组成。 所以在生图片的这个环节上&#xff0c;我们把比较火的这个stablediffusion用的这个diffusion扩散模型理…

第T8周:使用TensorFlow实现猫狗识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 文章目录 一、前期工作1.设置GPU&#xff08;如果使用的是CPU可以忽略这步&#xff09;2. 导入数据 二、数据预处理1、加载数据2、再次检查数据3. 配置数据集4…

mysql写个分区表

因为表量已经达到1个亿了。现在想做个优化&#xff0c;先按照 create_time 时间进行分区吧。 create_time 是varchar类型。 CREATE TABLE orders (id varchar(40) NOT NULL ,order_no VARCHAR(20) NOT NULL,create_time VARCHAR(20) NOT NULL,amount DECIMAL(10,2) NOT NULL,…

springboot使用aop或Jackson进行数据脱敏

1.aop 启动类加EnableAspectJAutoProxy 自定义注解&#xff0c;在实体类中使用表示被脱敏字段 建立aop切面类 可能这里gpt会建议你用Pointcut("execution(public * com.xx.aop..*.get*(..))")这种方式拦截&#xff0c;这种我试了&#xff0c;拦截不住。猜测在mvc返…

FPGA开发——UART回环实现之接收模块的设计

一、简介 因为我们本次进行串口回环的实验的对象是FPGA开发板和PC端&#xff0c;所以在接收和发送模块中先编写接收模块&#xff0c;这样可以在后面更好的进行发送模块的验证。&#xff08;其实这里先编写哪个模块&#xff09;都不影响&#xff0c;这里看自己心情&#xff0c;反…