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)来访问存在索引的某个字段时。
    在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

关于APP备案、小程序备案的问题,如何备案?

近日,工信部发布了关于开展移动互联网应用程序备案工作的通知。为落实相关法律法规要求,促进互联网行业规范健康发展,进一步做好移动互联网信息服务管理,现组织开展移动互联网应用程序(以下简称 APP)备案工…

数据结构的图存储结构

目录 数据结构的图存储结构 图存储结构基本常识 弧头和弧尾 入度和出度 (V1,V2) 和 的区别,v2> 集合 VR 的含义 路径和回路 权和网的含义 图存储结构的分类 什么是连通图,(强)连通图详解 强连通图 什么是生成树,生…

计算机竞赛 opencv 图像识别 指纹识别 - python

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于机器视觉的指纹识别系统 🥇学长这里给一个题目综合评分(每项满分5分) 难度系数:3分工作量:3分创新点:4分 该项目较为新颖,适…

[oneAPI] 手写数字识别-GAN

[oneAPI] 手写数字识别-GAN 手写数字识别参数与包加载数据模型训练过程结果 oneAPI 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Intel DevCloud for oneAPI:https://devcloud.intel.com/oneapi/get_started/aiAnalyticsToolki…

【STM32】 工程

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2022博客之星TO…

html2canvas生成图片地址Base64格式转成blob在转成file(二进制)可正常发送(保姆教程,复制粘贴可用)

开始: 最终结果: 1. html2canvas方法生成的图片地址已Base64编码形式放在img标签src中可直接展示生成的图片(注意页面标签获取位置,还有个setTimeout页面渲染需要时间) setTimeout(function () {var result {};v…

DiffusionDet: Diffusion Model for Object Detection

DiffusionDet: Diffusion Model for Object Detection 论文概述不同之处整体流程 论文题目:DiffusionDet: Diffusion Model for Object Detection 论文来源:arXiv preprint 2022 论文地址:https://arxiv.org/abs/2211.09788 论文代码&#xf…

24、springboot的自动配置01--类条件注解@ConditionalOnClass、bean条件注解@ConditionalOnBean

条件注解的理解:该注解指定了一些条件,只有符合这些条件,被该注解修饰的类或方法才能生效。 这些条件可以是yml配置文件里面的属性等数据是否存在,也可以是一些依赖驱动是否存在的条件、也可以是指定的bean是否存在等。 springbo…

Golang协程,通道详解

进程、线程以及并行、并发 关于进程和线程 进程(Process)就是程序在操作系统中的一次执行过程,是系统进行资源分配和调度的基本单位,进程是一个动态概念,是程序在执行过程中分配和管理资源的基本单位,每一…

iTOP-RK3588开发板安装TFTP服务端

首先在 ubuntu 中执行以下命令安装 TFTP 服务: apt-get install tftp-hpa tftpd-hpa 安装完成以后创建 TFTP 服务器工作目录,并对 TFTP 的服务配置文件进行修改,具体步骤如下: 输入以下命令在家目录创建 tftpboot 文件夹,如下图所示&#x…

Prompt、RAG、微调还是重新训练?如何选择正确的生成式AI的使用方法

生成式人工智能正在快速发展,许多人正在尝试使用这项技术来解决他们的业务问题。一般情况下有4种常见的使用方法: Prompt EngineeringRetrieval Augmented Generation (RAG 检索增强生成)微调从头开始训练基础模型(FM) 本文将试图根据一些常见的可量化…

爬虫逆向实战(十七)--某某丁简历登录

一、数据接口分析 主页地址:某某丁简历 1、抓包 通过抓包可以发现数据接口是submit 2、判断是否有加密参数 请求参数是否加密? 通过查看“载荷”模块可以发现有一个enPassword加密参数 请求头是否加密? 通过查看请求头可以发现有一个To…

C++学习系列之动态库报错问题

C学习系列之动态库报错问题 啰嗦问题解决总结 啰嗦 动态库已建,C文件一加,全是报错,一片红。 问题 解决 解决办法就是加标头 总结 小问题,记录一下。

基于 KubeSphere 的应用容器化在智能网联汽车领域的实践

公司简介 某国家级智能网联汽车研究中心成立于 2018 年,是担当产业发展咨询与建议、共性技术研发中心、创新成果转化的国家级创新平台,旨在提高我国在智能网联汽车及相关产业在全球价值链中的地位。 目前着力建设基于大数据与云计算的智能汽车云端运营…

边缘智能聚焦嵌入式世界

没有什么超出了我们的想象力的极限,我们习惯于在间谍电影中看到的东西需要进行大规模升级,以超越现在认为的标准。 德国纽伦堡—一切都超出了我们的想象范围,而且我们习惯于在间谍电影中看到的东西需要进行大规模升级,以超越现在认…

段错误核心转储

在linux下运行可执行文件的时候出现了以下错误: error:segmentation fault core dumped解决方法: #查看core文件大小判断是否可写 $ ulimit -a real-time non-blocking time (microseconds, -R) unlimited core file size (blocks, -c) …

30W IP网络有源音箱 校园广播音箱

SV-7042XT是深圳锐科达电子有限公司的一款2.0声道壁挂式网络有源音箱,具有10/100M以太网接口,可将网络音源通过自带的功放和喇叭输出播放,可达到功率30W。同时它可以外接一个30W的无源副音箱,用在面积较大的场所。5寸进口全频低音…

初始C语言(6)——详细讲解表达式求值以及其易错点

系列文章目录 第一章 “C“浒传——初识C语言(1)(更适合初学者体质哦!) 第二章 初始C语言(2)——详细认识分支语句和循环语句以及他们的易错点 第三章 初阶C语言(3)——…

GaussDB 实验篇+openGauss的4种1级分区案例

✔ 范围分区/range分区 -- 创建表 drop table if exists zzt.par_range; create table if not exists zzt.par_range (empno integer,ename char(10),job char(9),mgr integer(4),hiredate date,sal numeric(7,2),comm numeric(7,2),deptno integer,constraint pk_par_emp pri…

Python程序设计——列表

一、引言 关键点:一个列表可以存储任意大小的数据集合。 程序一般都需要存储大量的数值。假设,举个例子,需要读取100个数字,计算出它们的平均值,然后找出多少个数字是高于这个平均值的。程序首先读取100个数字并计算它…