当前位置: 首页 > 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…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

ubuntu系统文件误删(/lib/x86_64-linux-gnu/libc.so.6)修复方案 [成功解决]

报错信息&#xff1a;libc.so.6: cannot open shared object file: No such file or directory&#xff1a; #ls, ln, sudo...命令都不能用 error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory重启后报错信息&…...

【深尚想】TPS54618CQRTERQ1汽车级同步降压转换器电源芯片全面解析

1. 元器件定义与技术特点 TPS54618CQRTERQ1 是德州仪器&#xff08;TI&#xff09;推出的一款 汽车级同步降压转换器&#xff08;DC-DC开关稳压器&#xff09;&#xff0c;属于高性能电源管理芯片。核心特性包括&#xff1a; 输入电压范围&#xff1a;2.95V–6V&#xff0c;输…...

在ubuntu等linux系统上申请https证书

使用 Certbot 自动申请 安装 Certbot Certbot 是 Let’s Encrypt 官方推荐的自动化工具&#xff0c;支持多种操作系统和服务器环境。 在 Ubuntu/Debian 上&#xff1a; sudo apt update sudo apt install certbot申请证书 纯手动方式&#xff08;不自动配置&#xff09;&…...

SDU棋界精灵——硬件程序ESP32实现opus编码

一、 ​​音频处理框架​ 该项目基于Espressif的音频处理框架构建,核心组件包括 ESP-ADF 和 ESP-SR,以下是完整的音频处理框架实现细节: 1.核心组件 (1) 音频前端处理 (AFE - Audio Front-End) ​​main/components/audio_pipeline/afe_processor.c​​功能​​: 声学回声…...