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

Mysql之explain详解

1. explain作用

使用explain可以展示出sql语句的执行计划,再根据sql的执行计划去判断这条sql有哪些点可以进行优化,从而让sql的效率达到最大化。
在这里插入图片描述

2. 执行计划各列含义

(1)id:id列是select的序列号,这个sql执行过程中会执行几次select就有几个id,并且id是按照select出现的顺序增长的,id列的值越大优先级越高,id相同则是按照执行计划列从上往下执行。

在这里插入图片描述
在这里插入图片描述

(2)select_type:该列表示查询的类型,是简单查询还是复杂查询。

  1. simple:不包含子查询和union的简单查询。
    在这里插入图片描述
  2. primary:包含子查询的复杂查询中最外层的查询。
  3. subquery:包含子查询的复杂查询中的子查询。
    从下面sql执行计划中可以看出外层查询user表的类型为PRIMARY,where后面的子查询roles表类型为SUBQUERY。
    在这里插入图片描述
  4. derived:衍生查询,查询临时表中的数据。
  5. union:在union中的第二个和随后的查询。
  6. union result:表示合并的结果,最后的extra列中的Using temporary表示会创建一个临时表来存储合并结果。
    从下面sql的执行计划可以看出,第一条的类型为PRIMARY,就是复杂查询中的最外层的查询。
    第二条的类型为DERIVED,即在from子句的子查询中的结果放到一个临时表中,也就是对r1表的查询结果会衍生出一个临时表,所以对r1表的查询类型为DERIVED。第三条是对r2表的查询,由于是在union的后面,所以查询类型为UNION。第四条则是对2,3条查询的合并结果当作最终的子查询结果并存放在衍生出来的临时表中。

    在这里插入图片描述

(3)table:该列表示当前行访问的是哪张表,通常是表名或者该表的别名。

在这里插入图片描述

(4)partitions:该列表示查询将匹配记录的分区。 对于非分区表,该值为 NULL。

(5)type:该列表示关联类型或访问类型。该列的值决定了这条sql的查询性能,从最优到最差分别为:system > const > eq_ref > ref > range > index > all。

  1. system :表示整个表中只有一条记录,这种情况几乎不会出现。
  2. const :表示整个表中通过该字段查找只有唯一的一条记录,一般会出现在主键索引或者唯一索引的字段。
    在这里插入图片描述
  3. eq_ref :一般是关联查询的时候,主表用于关联的索引字段在被关联的副表中有且只有唯一一条记录。被关联的副表字段一般为主键或者唯一索引字段。
    在这里插入图片描述
  4. ref :一般是使用普通索引进行查询,查询的结果会存在多个符合条件的记录。
    在这里插入图片描述
  5. range :通常出现在范围查询中,比如in、between、大于、小于等。使用索引来检索给定范围的行。
    在这里插入图片描述
  6. index :从创建的索引文件中扫描全部索引数据,通常比ALL快一点。
    在这里插入图片描述
  7. all:在磁盘从头到尾的扫描全表数据来找到所需要的数据,查询速率最差。
    在这里插入图片描述

(6)possible_keys:该列表示在查询中可能用到的索引,仅仅只是可能,列出来的索引并不一定真正的使用到。如果该列为NULL,则表示没有相关索引。

(7)key:该列表示真正使用到的索引。

(8)key_len:该列表示sql查询语句中索引使用到的字节数,这个字节数并不是实际的长度,而是通过计算查询中使用到的索引中的长度得出来的,显示的是索引字段最大的可能长度。key_len是越小越好。

(9)ref:该列表示在key列记录的实际使用的索引中,表查找值时使用到的列或常量。常见的有const、字段名。

(10)rows:该列表示估算的要扫描的行数,注意这个并不是实际结果集的行数。

(11)Extra:该列表示是sql查询的额外信息,主要有以下几种情况:Using index、Using where、Using temporary、Using filesort、Impossible where、Select tables optimized away。

  1. Using index:表示查询的列被索引覆盖,索引被正确的使用,想要查询的信息在索引里面可以找到,不用再回表查询,这个是查询性能比较高的体现。
    在这里插入图片描述
  2. Using where:表示查询的列并没有被索引覆盖,where条件后面使用的是非索引的前导列,它仅仅是使用了where条件而已。
    在这里插入图片描述
  3. Using temporary:表示使用了临时表存储中间的结果,一般在进行合并查询的时候会使用临时表。
    在这里插入图片描述
  4. Using filesort:表示文件排序,说明Mysql对数据使用了外部的索引进行排序,并没有使用表中的索引进行排序。
    在这里插入图片描述
  5. Impossible where:表示where后的条件一直为false。
    在这里插入图片描述
  6. Select tables optimized away:表示使用某些聚合函数(比如 max、min)来访问存在索引的某个字段时。
    在这里插入图片描述

相关文章:

Mysql之explain详解

1. explain作用 使用explain可以展示出sql语句的执行计划,再根据sql的执行计划去判断这条sql有哪些点可以进行优化,从而让sql的效率达到最大化。 2. 执行计划各列含义 (1)id:id列是select的序列号,这个…...

每天一道leetcode:1926. 迷宫中离入口最近的出口(图论中等广度优先遍历)

今日份题目: 给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 . 表示)和墙(用 表示)。同时给你迷宫的入口 entrance ,用 entrance [entrancerow, …...

Mysql_5.7下载安装与配置基础操作教程

目录 一、Mysql57下载与安装 二、尝试登录Mysql 三、配置Mysql环境变量 一、Mysql57下载与安装 首先,进入Mysql下载官网:MySQL Community Downloads 随后,选择版本5.7.43,系统选择Windows,随后下方会出现两个下载选…...

【业务功能篇68】电商项目相关核心设计

https证书 http 超文本传输协议: 超文本:包括:文字,图片,音频,视频等。 传输:客户端向服务端发东西,服务端向客户端发东西。 协议:三方协议。怎么传,错误…...

微信开发之一键退出群聊的技术实现

简要描述: 退出群聊 请求URL: http://域名地址/quitChatRoom 请求方式: POST 请求头Headers: Content-Type:application/jsonAuthorization:login接口返回 参数: 参数名必选类型说明wI…...

〔012〕Stable Diffusion 之 中文提示词自动翻译插件 篇

✨ 目录 🎈 翻译插件🎈 下载谷歌翻译🎈 谷歌翻译使用方法🎈 谷歌翻译使用效果 🎈 翻译插件 在插件列表中搜索 Prompt Translator可以看到有2个插件选项:一个是基于谷歌翻译 〔推荐〕、一个基于百度和deepl…...

【C++】一文带你初识C++继承

食用指南:本文在有C基础的情况下食用更佳 🍀本文前置知识: C类 ♈️今日夜电波:napori—Vaundy 1:21 ━━━━━━️💟──────── 3:23 …...

SDK是什么,SDK和API有什么区别

SDK(Software Development Kit)是一种开发工具包,通常由软件开发公司或平台提供,用于帮助开发人员构建、测试和集成特定平台或软件的应用程序。SDK 包含一系列的库、工具、示例代码和文档,旨在简化开发过程并提供所需的…...

golang中使用chan控制协程并发简单事例

func main() {processNum : 5ch : make(chan struct{}, processNum)for true {ch <- struct{}{}go func() {defer func() {<-ch}()fmt.Println("我是协程", time.Now().UnixNano())time.Sleep(time.Second * 5)}()} } 可以看到&#xff0c;这里每5s会执行一次带…...

好用画流程图软件推荐 excalidraw

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;蚂蚁集团高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《EffectiveJava》独家解析》专栏作者。 热门文章推荐…...

【RP2040】香瓜树莓派RP2040之搭建开发环境(windows)

本文最后修改时间&#xff1a;2022年08月23日 01:57 一、本节简介 本节以树莓派pico开发板为例&#xff0c;搭建windows下的编译环境。 二、实验平台 1、硬件平台 1&#xff09;树莓派pico开发板 ①树莓派pico开发板 ②micro usb数据线 2&#xff09;电脑 2、软件平台 …...

基于springboot线上礼品商城

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…...

开源,微信小程序 美食便签地图(FoodNoteMap)的设计与开发

目录 0 前言 1 美食便签地图简介 2 美食便签地图小程序端开发 2.1技术选型 2.2前端UI设计 2.3主页界面 2.4个人信息界面 2.5 添加美食界面 2.6美食便签界面 2.8 美食好友界面 2.9 美食圈子界面 2.10 子页面-店铺详情界面 2.11 后台数据缓存 2.12 订阅消息通知 2.1…...

kubernetes集群(k8s)之安装部署Calico 网络

目录 安装部署Calico 网络 &#xff08;一&#xff09;环境准备 &#xff08;二&#xff09;部署docker环境 &#xff08;三&#xff09;部署kubernetes集群 &#xff08;四&#xff09;部署Calico网络插件 安装部署Calico 网络 &#xff08;一&#xff09;环境准备 IP地…...

【C/C++】C++11 Lambda 表达式捕获变量使用技巧

在 C11 中&#xff0c;lambda 表达式可以通过捕获列表来捕获指定的变量。捕获列表是放在 lambda 表达式参数列表之前的一对方括号 [] 中&#xff0c;用来指定 lambda 表达式捕获哪些变量。 捕获列表有以下几种形式&#xff1a; []&#xff1a;不捕获任何变量。[&]&#x…...

大势智慧软硬件技术答疑第八期

1.DasViewer可以使用同一个账号登录多台电脑&#xff0c;然后同时进行格式转换操作吗&#xff1f; 答&#xff1a;可以的 2.在DasViewer里面添加了标注点&#xff0c;能手动修改标注点坐标、手动输入坐标值 吗&#xff1f; 答&#xff1a;目前DasViewer暂不支持手动输入坐标 …...

jvm-jvm与java体系结构

1.JAVA及JVM简介 jvm发展历程 sun classic vm jdk1.4时完全被淘汰 2.虚拟机与JAVA虚拟机 java虚拟机就是二进制字节码的运行环境&#xff0c;负责装载字节码到其内部&#xff0c;解释/编译为对应平台上的机器指令执行&#xff0c;每一条java指令&#xff0c;java虚拟机中都有…...

Three.js 实现材质边缘通道发光效果

相关API的使用&#xff1a; 1. EffectComposer&#xff08;渲染后处理的通用框架&#xff0c;用于将多个渲染通道&#xff08;pass&#xff09;组合在一起创建特定的视觉效果&#xff09; 2. RenderPass(是用于渲染场景的通道。它将场景和相机作为输入&#xff0c;使用Three.…...

【MFC】10.MFC六大机制:RTTI(运行时类型识别),动态创建机制,窗口切分,子类化-笔记

运行时类信息&#xff08;RTTI&#xff09; C: ##是拼接 #是替换成字符串 // RTTI.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <iostream> #include <afxwin.h>#ifdef _DEBUG #define new DEBUG_NEW #endifCWinApp th…...

ui设计师个人年终工作总结2020最新范文5篇

ui设计师个人年终工作总结(一) 我于20年x育人x日成为公司的试用员工&#xff0c;安排在技术研发中心担任UI界面设计一职&#xff0c;现将我的工作情况分为三个阶段来总结如下汇报&#xff1a; 一、萌芽阶段 记得初次应聘时&#xff0c;我对公司的认识仅仅局限于行业之一&#x…...

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

今日学习:Spring线程池|并发修改异常|链路丢失|登录续期|VIP过期策略|数值类缓存

文章目录 优雅版线程池ThreadPoolTaskExecutor和ThreadPoolTaskExecutor的装饰器并发修改异常并发修改异常简介实现机制设计原因及意义 使用线程池造成的链路丢失问题线程池导致的链路丢失问题发生原因 常见解决方法更好的解决方法设计精妙之处 登录续期登录续期常见实现方式特…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

C++.OpenGL (20/64)混合(Blending)

混合(Blending) 透明效果核心原理 #mermaid-svg-SWG0UzVfJms7Sm3e {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-icon{fill:#552222;}#mermaid-svg-SWG0UzVfJms7Sm3e .error-text{fill…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能

1. 开发环境准备 ​​安装DevEco Studio 3.1​​&#xff1a; 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK ​​项目配置​​&#xff1a; // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...

人工智能--安全大模型训练计划:基于Fine-tuning + LLM Agent

安全大模型训练计划&#xff1a;基于Fine-tuning LLM Agent 1. 构建高质量安全数据集 目标&#xff1a;为安全大模型创建高质量、去偏、符合伦理的训练数据集&#xff0c;涵盖安全相关任务&#xff08;如有害内容检测、隐私保护、道德推理等&#xff09;。 1.1 数据收集 描…...