【MySQL】了解MySQL的Explain,读这一篇够了( ̄∇ ̄)/

目录

ID

select_type 查询类型

table 表名

type 关联类型/访问类型

possible_keys MySQL觉得可能要用到的索引

key 实际用到的索引

key_len 用到的索引的长度(比如可用于判断使用了联合索引中的哪几个)

ref 表查找值所用的列(表名.字段)或常量(const)

row 预估要读取并检测的行数

Extra 额外信息

The EXPLAIN statement provides information about how MySQL executes statements.

EXPLAIN提供MySQL如何执行语句的信息,举个例子

EXPLAIN SELECT name FROM app_user WHERE id = 1;

就是在你要执行的查询语句前加一个EXPLAIN,就可以查看执行当前语句的具体信息,比如属于什么查询类型啦~走了什么索引啦(具体如下图)~

总的来说,通过EXPLAIN我们可以获取以下信息:

  • 表的读取顺序

  • 数据读取操作的操作类型

  • 使用了哪些索引

  • 每张表优化器查询了多少行数据

 我们在碰到一些类型“慢查询”问题时,一般会使用EXPLAIN来分析我们的SQL还有哪些地方可以做优化,具体就是根据上图中列表字段进行分析的,本篇就把EXPLAIN的关键字段挖个地儿朝天,👩再也不用担心要如何对SQL进行优化叻( ̄∇ ̄)/

ID

ID越大越先执行,一致按先后顺序执行

select_type 查询类型

这里只列出了常见的几种,想更加深入可以戳官网

https://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain_select_typehttps://dev.mysql.com/doc/refman/8.0/en/explain-output.html#explain_select_type

  • SIMPLE 简单查询(无联合查询或者子查询)

  • PRIMARY 复杂查询中最外层的select

  • DERIVED from后面的临时表(派生表)

  • SUBQUERY select后面的临时表

  • UNION union中第二个(或者说后一个)select

table 表名

表示结果集出自哪张表

举个🌰,如果某个查询table的值为<devired3>的含义就是这个select是从ID为3的派生表中进行查询的

type 关联类型/访问类型

类型

解释

备注

NULL

在优化阶段分解查询语句,使得在执行阶段无需再访问表/索引

system

无需进行磁盘IO,并且要查询的结果集只有一行记录

属于constant 的特殊情况

constant

查找主键索引,MySQL能对查询的某部分进行优化将其转换为一个常量(走主键(primary key)或者唯一(unique key)索引),所以表中最多有一个匹配行,只需要读取1次

  • 可以使用show warnings;查看优化后的版本

eq_ref

查找唯一性索引,比如表链接时,使用主键/唯一索引进行关联的表查询,最多只会返回1条数据

ref

使用普通索引/非唯一性索引(从根节点开始),或者唯一性索引的部分前缀,索引要进行比较,有可能查出多条结果集

使用了联合主键前缀也是这种类型

range

查询某个索引的部分索引,范围扫描,通常出现在in()/between/>/</>=/<=等操作中,使用一个索引来检索指定范围

查询效率跟结果集大小相关(可使用分页等方式进行优化)

index (全索引扫描)

查找全部索引树,表示扫描全索引可以拿到结果(从1开始遍历),一半是扫描某个二级索引,这种扫描一般不会从索引树根节点开始快速查找,而是直接对二级索引的叶子节点遍历和扫描,速度还是比较慢的,这种查询一般会使用覆盖索引,二级索引一般比较小(主键索引包含数据,一般会比较大,因而读取的磁盘数据较大),所以index通常会比ALL快一些

  • 如果主键索引和二级索引都包含结果集,MySQL会选用小的索引进行查询

  • 虽然index也使用到了索引,但是和ref使用索引的方式不同,index是通过叶子节点从第一条索引开始向下遍历的,而ref是从索引的根节点开始折半查找,因而ref效率比index快很多

ALL

全表扫描,不使用任何索引,从第一个主键(聚簇索引的所有叶子节点)开始向下查找

possible_keys MySQL觉得可能要用到的索引

key 实际用到的索引

key_len 用到的索引的长度(比如可用于判断使用了联合索引中的哪几个)

类型

具体类型

长度

字符串

char(n)

n字节

varchar(n)

如果是utf-8则长度3n+2 字节,加的2字节用于存储字符串长度

utf-8一个占3字节

数值类型

tinyint

1字节

smallyint

2字节

int

4字节

bigint

8字节

时间类型

date

3字节

timestamp

4字节

NULL

NULL

1字节

允许为空还有1个字段记录是否为空

一般来讲,索引的最大长度是768字节,当字符串过长时,MySQL会做一个类似左前缀索引的处理,将前半部分的字符串提取出来做索引

ref 表查找值所用的列(表名.字段)或常量(const)

这一列显示了在key列记录的索引中,表查找值所用到的列/常量

row 预估要读取并检测的行数

Extra 额外信息

  • Using index

      查询结果集使用了覆盖索引覆盖索引是一种查询方式,表示要查询的结果字段在查询的索引树中全部包括,无需再回表

      覆盖索引是指MySQL执行计划explain结果里的key有使用索引,如果select后面查询的字段都可以从这个索引树中获取,这种情况一般可以说是使用了覆盖索引,extra列中就会显示Using Index;覆盖索引一般针对的是辅助索引,整个查询结果只通过辅助索引就能拿到结果,不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其他字段值

    • 优化点

          如果出现回表的情况,即在查询字段中有一个字段没有加索引或者出现索引失效的问题,导致sql回表走了全表扫描,就可以使用覆盖索引进行优化

  • Using index condition

      查询的列不完全被索引覆盖,where条件之前一个前导列的范围

  • Using temporary/Using filesort

      使用了临时表

  • Using where

      使用Where语句处理结果,并且查询到的列未被索引覆盖

……

上面是一些常见的类型,其他还有很多,感兴趣可以参考官网

MySQL :: MySQL 8.0 Reference Manual :: 8.8.2 EXPLAIN Output Format

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

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

相关文章

【刷题笔记】笔记三

凑算式&#xff08;蓝桥真题&#xff09;题目&#xff1a;注意&#xff1a;需要通分&#xff0c;有些时候除不尽需要通分。源码&#xff1a;方法一&#xff1a;递归回溯全排列int ret 0; #define MAX 9 //多少个全排列 int a[MAX];//排列数组 bool flag[MAX];//标记数组int n …

cuda学习4-6

4. Hardware Implementation NVIDIA GPU架构是围绕一系列可扩展的多线程流式多处理器&#xff08;SM&#xff09;构建的。当主机CPU上的CUDA程序调用内核网格时&#xff0c;网格的块将被枚举并分配给具有可用执行能力的多处理器。线程块的线程在一个多处理器上并发执行&#x…

Shell脚本之数组向函数传参

一、向函数传数组参数 如果将数组作为函数的参数&#xff0c;函数只会取数组变量的第一个值 1、格式 #!/bin/bash #数组在函数中传参test() {echo "函数接收到的参数列表为&#xff1a;$" newarr($*)echo "新数组的值为&#xff1a;${newarr[]}" }#####…

理解 arp以及大致的原理 + 存在的安全隐患

ARP原理 ARP协议是地址解析协议&#xff08;Address Resolution Protocol&#xff09;是通过解析IP地址得到MAC地址&#xff0c;所有ARP协议在网络层被应用&#xff0c;它是网络层与链路层连接的重要枢纽 每台主机都会在自己的ARP缓冲区中建立一个ARP列表&#xff0c;ARP列表表…

0115 用户管理

1.关机、重启命令 shutdown -h now 立刻进行挂机&#xff08;hhalt 停止&#xff09; shutdown -h 1 1分钟后关机&#xff08;默认&#xff09; shutdown -r now 重启 halt 关机 reboot …

关于TextureRender适配的解决方案

当我们用摄像机渲染出一个图片&#xff0c;显示在UI的时候&#xff0c;会发现&#xff0c;你如果自适配&#xff0c;那么就会拉伸图片&#xff0c;导致人物或者场景变形。 我最近就遇到了这个事&#xff0c;这里我给出几种问题和解决方案&#xff1a; 1 &#xff1a;当我们想…

Sentinel入门使用

目录快速开始demoSentinelResource引入sentinel控制台集成spring cloud创建父工程sentinel工程spring-cloud工程client微服务工程server微服务工程测试总结快速开始 demo <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-core&…

Linux系统【centos7】怎么手动部署网站?

要手动部署网站在CentOS 7系统上&#xff0c;请按照以下步骤操作&#xff1a; 1. 安装Apache服务器 在终端中使用以下命令安装Apache服务器&#xff1a; sudo yum install httpd 2. 配置防火墙 设置防火墙规则以允许HTTP和HTTPS流量&#xff1a; sudo firewall-cmd --perm…

台灯学生用哪个牌子最好?精选学生专用台灯第一品牌

许多人知道&#xff0c;在我国普遍有有个现象&#xff0c;学生除了每天上下课&#xff0c;还有一系列的补习班、兴趣班&#xff0c;放学后的课后作业也是非常多&#xff0c;这就是现代学生的学习情况&#xff0c;随着双减政策出现&#xff0c;儿童的学习任务重&#xff0c;父母…

【从零开始学习 UVM】11.5、UVM Register Layer —— 后门访问 实战项目(RAL实战,交通灯为例)

文章目录 后门访问是什么?定义后门 HDL 路径示例sequence中的后门访问示例UVM寄存器模型允许使用前门访问DUT寄存器,就像我们之前在寄存器环境中看到的那样。 这意味着环境中的所有寄存器读写操作都会转换为总线事务,并驱动到设计的总线接口,就像典型系统中的任何其他硬件…

网站怎么优化出排名

网站怎么优化出排名&#xff0c;独立站SEO优化应该怎么做&#xff1f;#独立站#推广优化#SEO优化 今天跟大家聊一下独立站的SEO&#xff0c;是指个人或者小型的企业对独立站进行一个优化&#xff0c;以提高他在搜索引擎中的排名和流量&#xff0c;从而吸引更多的这个客户和用户。…

SQLyog图形化界面工具【超详细讲解】

目录 一、SQLyog 介绍 二、SQLyog 社区版下载 三、SQLyog 安装 1、选择Chinese后点击OK 2、点击“下一步” 3、选择“我接受”后点击“下一步” 4、点击“下一步” 5、修改安装位置(尽量不要安装在C盘),点击“安装” 6、安装后点击“下一步”

在MDK5(Keil537)中同时配置STM32和C51的环境(简单可行)

1.首先安装MDK5&#xff0c;可以看到&#xff0c;安装路径为D盘下的Keil_v4Andv5文件夹&#xff0c;next进行安装 2.安装完成后,这一步非常重要&#xff0c;将TOOLS文件改名&#xff0c;随便改什么都行。否则下载keil4时产生的TOOL文件将会取消下载或者替换掉原文件 3.接下来下…

【设计模式】创建型-单例模式

文章目录一、单例模式二、单例模式的八种实现方式2.1、饿汉式&#xff08;静态常量&#xff09;2.2、饿汉式&#xff08;静态代码块&#xff09;2.3、懒汉式&#xff08;线程不安全&#xff09;2.4、懒汉式&#xff08;线程安全&#xff0c;同步方法&#xff09;2.5、双重检查2…

Android上传aar到本地仓

由于最近项目结构变动,经常需要将module项目打成aar供其他项目引用,在使用过程中,遇到本地module项目上传maven后其引用的aar其他项目需要重复引入的问题,所以在此记录下,将本地module项目打包aar上传本地仓和第三方aar上传本地仓的方法. 一、将本地module项目打包成aar上传到…

考勤、充电,绑身份,你的人员定位系统就缺它了!

我们做人脸识别智能发卡充电柜是要解决什么问题&#xff1f; &#xff08;1&#xff09;工地、港口等场景&#xff0c;人员流动大&#xff0c;管理难 在工地、港口等场景&#xff0c;人员组成通常比较复杂。有来自施工方、客户、各劳务队、各管理层的人员&#xff0c;以及来自…

大数据 | 实验一:大数据系统基本实验 | 熟悉常用的HDFS操作

文章目录&#x1f4da;实验目的&#x1f4da;实验平台&#x1f4da;实验内容⭐️HDFSApi⭐️HDFSApi2⭐️HDFSApi3⭐️HDFSApi4⭐️HDFSApi5⭐️HDFSApi6⭐️HDFSApi7⭐️HDFSApi8⭐️HDFSApi9⭐️HDFSApi10&#x1f4da;实验目的 1&#xff09;理解 HDFS 在 Hadoop 体系结构中…

scroll-view不能滚动问题

准备 <!--index.wxml--> <view class"container"> <scroll-view class"scroll-container"><view class"scroll-item" wx:key"index" wx:for"{{listData}}">{{item}}</view> </scroll-vi…

RK3588平台开发系列讲解(同步与互斥篇)信号量介绍

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、信号量介绍二、信号量API1、结构体2、API三、函数调用流程沉淀、分享、成长,让自己和他人都能有所收获!😄 📢上一章我们看了自旋锁的原理,本章我们一起学习下信号量的用法。 一、信号量介绍 和自旋锁一样,…

Python 进阶指南(编程轻松进阶):七、编程术语

原文&#xff1a;http://inventwithpython.com/beyond/chapter7.html 在 XKCD 漫画《飞人五号》&#xff08;xkcd.com/1133&#xff09;中&#xff0c;网络漫画的艺术家兰道尔门罗只用了 1000 个最常见的英语单词&#xff0c;就创作出了土星五号火箭的技术示意图。这部漫画把所…
最新文章