mysql EXPLAIN关键字

news2024/11/16 3:41:15

EXPLAIN

  • 使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。
  • 通过EXPLAIN,我们可以分析出以下结果:
    • 表的读取顺序
    • 数据读取操作的操作类型
    • 哪些索引可以使用
    • 哪些索引被实际使用
    • 表之间的引用
    • 每张表有多少行被优化器查询

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uYOyQKTk-1676732709711)(C:\Users\IsTrueLove\AppData\Roaming\Typora\typora-user-images\image-20230218225343565.png)]

参数意义:

  • id:select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序

    • id相同,执行顺序由上至下
    • id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行
  • select_type,表示查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询。

    • SIMPLE 简单的select查询,查询中不包含子查询或者UNION
    • PRIMARY 查询中若包含任何复杂的子部分,最外层查询则被标记为PRIMARY
    • SUBQUERY 在SELECT或WHERE列表中包含了子查询
    • DERIVED 在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询,把结果放在临时表中
    • UNION 若第二个SELECT出现在UNION之后,则被标记为UNION:若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED
    • UNION RESULT 从UNION表获取结果的SELECT
  • table指的就是当前执行的表

  • type所显示的是查询使用了哪种类型

    • system 表只有一行记录(等于系统表),这是const类型的特列,平时不会出现,这个也可以忽略不计
    • const 表示通过索引一次就找到了,const用于比较primary key 或者unique索引。因为只匹配一行数据,所以很快。
    • eq_ref 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于主键或唯一索引扫描
    • ref非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体。
    • range 只检索给定范围的行,使用一个索引来选择行,key列显示使用了哪个索引,一般就是在你的where语句中出现between、< 、>、in等的查询,这种范围扫描索引比全表扫描要好,因为它只需要开始于索引的某一点,而结束于另一点,不用扫描全部索引。
    • index Full Index Scan,Index与All区别为index类型只遍历索引树。这通常比ALL快,因为索引文件通常比数据文件小。(也就是说虽然all和Index都是读全表,但index是从索引中读取的,而all是从硬盘读取的)
    • all Full Table Scan 将遍历全表以找到匹配的行
  • possible_keys显示可能应用在这张表中的索引,一个或多个。查询涉及到的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用。

  • key 是实际使用的索引,如果为NULL,则没有使用索引。(可能原因包括没有建立索引或索引失效),查询中若使用了覆盖索引则该索引仅出现在key列表中

  • key_len显示的值为索引字段的最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的。

  • ref 显示索引的那一列被使用了,如果可能的话,最好是一个常数

  • rows 根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数,也就是说,用的越少越好

  • Extra 包含不适合在其他列中显式但十分重要的额外信息

    • Using filesort 说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作称为“文件排序”。
    • Using temporary 使用了用临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by。
    • Using index 表示相应的select操作中使用了覆盖索引(Covering Index),避免访问了表的数据行,效率不错。如果同时出现using where,表明索引被用来执行索引键值的查找;如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。
    • Using where表明使用了where过滤
    • Using join buffer表明使用了连接缓存,比如说在查询的时候,多表join的次数非常多,那么将配置文件中的缓冲区的join buffer调大一些。
    • impossible where where子句的值总是false,不能用来获取任何元组
    • elect tables optimized away 在没有GROUPBY子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。
    • distinct 优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文吃透SQL性能优化,阿里47条军规

目录1、先了解MySQL的执行过程2、数据库常见规范3、所有表必须使用Innodb存储引擎4、每个Innodb表必须有个主键5、数据库和表的字符集统一使用UTF86、查询SQL尽量不要使用select *&#xff0c;而是具体字段7、避免在where子句中使用 or 来连接条件8、尽量使用数值替代字符串类型…

【数据挖掘实战】——中医证型的关联规则挖掘

目录 一、背景和挖掘目标 1、问题背景 2、传统方法的缺陷 3、原始数据情况 4、挖掘目标 二、分析方法和过程 1、初步分析 2、总体过程 第1步&#xff1a;数据获取 第2步&#xff1a;数据预处理 第3步&#xff1a;构建模型 三、思考和总结 项目地址&#xff1a;Data…

YOLOv6-目标检测论文解读

文章目录摘要问题算法网络设计BackboneNeckHead标签分配SimOTA&#xff08;YOLOX提出&#xff09;&#xff1a;TAL&#xff08;Task alignment learning&#xff0c;TOOD提出&#xff09;损失函数分类损失框回归损失目标损失行业有用改进自蒸馏图像灰度边界填充量化及部署实验消…

测试1:测试相关概念

1.测试相关概念 1.1.测试概念 1.1.1.需求 符合正式文档规定的条件和权能&#xff0c;包括用户需求和软件需求 它们之间的的转换是&#xff1a;沟通 用户需求和软件需求的区别&#xff1a; 能否指导开发人员开发&#xff0c;测试人员编写测试用例 1.1.2.缺陷Bug 与正确的…

补充前端面试题(三)

图片懒加载<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, in…

「数据仓库」怎么选择现代数据仓库?

构建自己的数据仓库时要考虑的基本因素我们用过很多数据仓库。当我们的客户问我们&#xff0c;对于他们成长中的公司来说&#xff0c;最好的数据仓库是什么时&#xff0c;我们会根据他们的具体需求来考虑答案。通常&#xff0c;他们需要几乎实时的数据&#xff0c;价格低廉&…

[SSD科普之1] PCIE接口详解及应用模式

PCI-Express(peripheral component interconnect express)是一种高速串行计算机扩展总线标准&#xff0c;它原来的名称为“3GIO”&#xff0c;是由英特尔在2001年提出的&#xff0c;旨在替代旧的PCI&#xff0c;PCI-X和AGP总线标准。一、PCI-E x1/x4/x8/x16插槽模式PCI-E有 x1/…

day20_经典接口(Comparable丶Comparator)

由来 我们知道基本数据类型的数据&#xff08;除boolean类型外&#xff09;需要比较大小的话&#xff0c;之间使用比较运算符即可&#xff0c;但是引用数据类型是不能直接使用比较运算符来比较大小的。那么&#xff0c;如何解决引用类型比较大小的问题&#xff1f; java.lang…

基于Spring、Spring MVC、MyBatis的房屋销售购买系统

文章目录项目介绍主要功能截图&#xff1a;登录前台首页后台首页房屋区域管理出租房屋审核账号管理部分代码展示设计总结项目获取方式&#x1f345; 作者主页&#xff1a;Java韩立 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、 简历模板、学习资料、面试题…

vTESTstudio - VT System CAPL Functions - VT2004(续2)

不要沮丧&#xff0c;不必惊慌&#xff0c;做努力爬的蜗牛或坚持飞的笨鸟&#xff0c;我们试着长大&#xff0c;一路跌跌撞撞&#xff0c;哪怕遍体鳞伤。vtsSetPWMVoltageLow - 设置PWM输出上的低电压功能&#xff1a;指定数字输出信号&#xff08;尤其是PWM信号&#xff09;输…

2023年美赛C题Wordle预测问题一建模及Python代码详细讲解

相关链接 &#xff08;1&#xff09;2023年美赛C题Wordle预测问题一建模及Python代码详细讲解 &#xff08;2&#xff09;2023年美赛C题Wordle预测问题二建模及Python代码详细讲解 &#xff08;3&#xff09;2023年美赛C题Wordle预测问题三、四建模及Python代码详细讲解 &…

史密斯圆图

在射频、微波中&#xff0c;常常使用史密斯圆图来做阻抗匹配。在不涉及复杂的数学推导&#xff0c;仍能把圆图用起来。 比如&#xff0c;共轭匹配。 RL1jX&#xff0c;需要找到-jX来抵消jX&#xff0c;消掉虚部之后&#xff0c;只留下实部&#xff0c;最终等效为RL‘1。 史密…

Android 基础知识4-2.7 RelativeLayout(相对布局)

一、RelativeLayout的概述 RelativeLayout&#xff08;相对布局&#xff09;是一种根据父容器和兄弟控件作为参照来确定控件位置的布局方式。在很多时候&#xff0c;线性布局还不能满足我们的需求&#xff0c;比如&#xff0c;我们在一行&#xff08;列&#xff09;上显示多个控…

C#反射原理

一、前言反射&#xff08;Reflection&#xff09;的内容在博客中已经写了一篇&#xff0c;什么是反射&#xff0c;反射的使用&#xff0c;反射优缺点总结&#xff1b;在面试中突然被问道反射的原理&#xff0c;按照理解反射就是在Reflection命名空间和对象的Type对象获取类的方…

Innodb索引还不清楚?看这一篇就够啦

1. 索引是什么 1.1 初识索引 ------------------- | id | name | age | ------------------- | 1 | 帅哥1 | 30 | | 2 | 帅哥2 | 18 | | 3 | 帅哥3 | 25 | | 4 | 帅哥4 | 21 | | 5 | 帅哥5 | 29 | | 6 | 帅哥6 | 35 | -------------------…

基于飞桨PaddleClas完成半导体晶圆图谱缺陷种类识别

wolfmax老狼&#xff0c;飞桨领航团无锡团团长&#xff0c;飞桨开发者技术专家&#xff08;PPDE&#xff09;&#xff0c;AICA六期学员&#xff0c;某半导体CIM软件集成商图像算法工程师&#xff0c;主要研究方向为图像检测、图像分割等算法。• 作者AI Studio主页https://aist…

Android开发:Activity启动模式

1.怎样设置Activity的启动模式 可以在清单文件中自己添加活动的启动模式, android : launchMode"standard", 不写的话系统默认就是标准模式. 2.启动模式 2.1.默认启动模式 标准启动模式就是栈, 打开一个活动就将活动压入栈中, 返回就将活动退出栈中. 不同的Activit…

老大react说:schedule,我们今年的小目标是一个亿

hello&#xff0c;这里是潇晨&#xff0c;今天来讲个故事 讲个故事&#xff1a; 从前&#xff0c;有家z公司&#xff0c;z公司的ceo叫react&#xff0c;它收下有个小弟或者叫小leader&#xff0c;schedule schedule每天负责消化老大react画的大饼&#xff0c;然后将拆解成一…

如何开始写Python爬虫?给入门Python小白一条清晰的学习路线

记录一下我自己从零开始写Python爬虫的心得吧&#xff01; 我刚开始对爬虫不是很了解&#xff0c;又没有任何的计算机、编程基础&#xff0c;确实有点懵逼。从哪里开始&#xff0c;哪些是最开始应该学的&#xff0c;哪些应该等到有一定基础之后再学&#xff0c;也没个清晰的概…

Java程序怎么运行?final、static用法小范围类型转大范围数据类型可以吗?

文章目录1.能将int强制转换为byte类型的变量吗&#xff1f;如果该值大于byte类型的范围&#xff0c;将会出现什么现象&#xff1f;2. Java程序是如何执行的&#xff1f;3.final 在 Java 中有什么作用&#xff1f;4.final有哪些用法?5.static都有哪些用法?1.能将int强制转换为…