Mysql-Explain-使用说明

news2024/11/19 12:36:39

Explain 说明

explain SELECT * FROM tb_category_report;

在这里插入图片描述

  • id:SELECT识别符,这是SELECT查询序列号。
  • select_type:表示单位查询的查询类型,比如:普通查询、联合查询(union、union all)、子查询等复杂查询。
  • table:表示查询的表
  • partitions:使用的哪些分区(对于非分区表值为null)。
  • type(重要)表示表的连接类型。
  • possible_keys:此次查询中可能选用的索引
  • key:查询真正使用到的索引
  • key_len:显示MySQL决定使用的索引size
  • ref:哪个字段或常数与 key 一起被使用
  • rows:显示此查询一共扫描了多少行,这个是一个估计值,不是精确的值。
  • filtered: 表示此查询条件所过滤的数据的百分比
  • Extra:额外信息
select_type
  1. simple: 普通查询,表示不需要union操作或者不包含子查询的简单select查询。有连接查询时,外层的查询为simple。
explain select * from tb_seckill_goods;

在这里插入图片描述

  • primary: 查询的主要部分,一个需要union操作或者含有子查询的select位于最外层的单位查询的select_type即primary。
#包含Union 前面的为主要查询
explain select * from tb_seckill_goods a union select * from tb_seckill_goods b;

在这里插入图片描述

#包含子查询外层的查询为主要查询
explain select (select id from tb_seckill_goods where price=4.00) from tb_spu;

在这里插入图片描述

  1. union:连接查询
  • derived,在from列表中包含的子查询被标记为derived(衍生),MySQL会递归执行这些子查询,把结果放在临时表中
#from中写子查询那么这个子查询会被标记为derived
explain select * from (select * from tb_seckill_goods a union select * from tb_seckill_goods b) c;

在这里插入图片描述

  • union,若第二个select出现在union之后,则被标记为union:若union包含在from子句的子查询中,外层select将被标记为:derived
explain  select * from (select * from tb_seckill_goods a where item_id = '1'  union select  * from tb_seckill_goods b where item_id = '12' ) c;

在这里插入图片描述

  • union result 从union表获取结果的select
  1. dependent union: 依赖连接查询,与union一样出现在union 或union all语句中,但是这个查询要受到外部查询的影响
explain select * from tb_seckill_goods a where a.id in (select id from tb_seckill_goods b union select id from tb_seckill_goods c);

在这里插入图片描述

  1. subquery: 子查询,除了from字句中包含的子查询外,其他地方出现的子查询都可能是subquery
explain select (select id from tb_seckill_goods where price=4.00) from tb_spu;

在这里插入图片描述

  1. dependent subquery: 依赖子查询,与dependent union类似,表示这个subquery的查询要受到外部表查询的影响
explain select * from tb_seckill_goods a where a.id in (select id from tb_seckill_goods b union select id from tb_seckill_goods c);

在这里插入图片描述

  1. derived:派生表, from字句中出现的子查询,也叫做派生表,其他数据库中可能叫做内联视图或嵌套select
#from 中写子查询那么这个子查询会被标记为derived
explain select * from (select * from tb_seckill_goods a union select * from tb_seckill_goods b) c;

在这里插入图片描述

type

性能从好到差:

system
const
eq_ref
ref
fulltext
ref_or_null
unique_subquery
index_subquery
range
index_merge
index
ALL
  1. system:表中只有一行数据或者是空表。等于系统表,这是const类型的特列,平时不会出现,可以忽略不计
  2. const(重要):使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const。其他数据库也叫做唯一索引扫描。
  3. eq_ref(重要):唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。
  4. ref(重要):非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体。
  • 组合索引
  • 非唯一索引
  1. fulltext:全文索引检索,要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引.
  2. ref_or_null:与ref方法类似,只是增加了null值的比较。实际用的不多。
  3. unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值
  4. index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。
  5. range(重要):索引范围扫描,常见于使用>,<,is null,between ,in ,like等运算符的查询中。
  6. index_merge:表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引,官方排序这个在ref_or_null之后,但是实际上由于要读取所有索引,性能可能大部分时间都不如range
  7. index(重要):select结果列中使用到了索引,type会显示为index。全部索引扫描,把索引从头到尾扫一遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可以使用索引排序或者分组的查询。
  8. all(重要):这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。
  • type为const
    使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const。
explain select * from tb_seckill_goods where id = 1;

在这里插入图片描述

  • eq_ref:唯一性索引
    连接字段主键或者唯一性索引
explain select * from tb_seckill_goods a left join tb_seckill_goods b on a.id=b.id;

在这里插入图片描述

  • ref:非唯一性索引
    非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,它可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体。
explain select * from tb_seckill_goods where title= '华为5G手机';

在这里插入图片描述

  • range:范围查询
explain select * from tb_seckill_goods where title like '华为%';

在这里插入图片描述

  • index:查询结果列中使用索引
    select结果列中使用到了索引,type会显示为index。全部索引扫描,把索引从头到尾扫一遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可以使用索引排序或者分组的查询(也就是覆盖索引不用回表查询)。
explain select title from tb_seckill_goods;

在这里插入图片描述

  • all:全表扫描
    这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。
Extra

01-Using filesort
使用了文件排序,说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。MySQL中无法利用索引完成的排序操作称为“文件排序”。这种操作需要优化sql。

explain select price from tb_seckill_goods where price >100 order by cost_price;

在这里插入图片描述

#有索引使用了所以排序
explain select price from tb_seckill_goods where price >100 order by price;

在这里插入图片描述

02-Using index
表示相应的SELECT查询中使用到了索引,避免访问表的数据行,这种查询的效率很高!

  • 如果同时出现Using Where ,索引在where之后,用作查询条件(也就是说没有没有在where条件中使用到索引)
  • 如果没有同时出现Using Where ,索引在where之前,用作查询结果读取(也就是说我们在取列数据的时候和条件过滤的时候都用到了索引)
    03-Using where
    表示MySQL将对InnoDB提取的结果在SQL Layer层进行过滤,过滤条件字段无索引;
    04-Using join buffer
    表明使用了连接缓存,比如说在查询的时候,多表join的次数非常多,那么将配置文件中的缓冲区的join buffer调大一些。

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

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

相关文章

房屋租赁系统的Java实战开发之旅

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

【Java多线程案例】实现阻塞队列

1. 阻塞队列简介 1.1 阻塞队列概念 阻塞队列&#xff1a;是一种特殊的队列&#xff0c;具有队列"先进先出"的特性&#xff0c;同时相较于普通队列&#xff0c;阻塞队列是线程安全的&#xff0c;并且带有阻塞功能&#xff0c;表现形式如下&#xff1a; 当队列满时&…

CSP-202012-2-期末预测之最佳阈值

CSP-202012-2-期末预测之最佳阈值 【70分思路】 本题的难点还是时间复杂度&#xff0c;暴力枚举会导致时间超限。对于每一个可能的阈值theta&#xff0c;代码都重新计算了整个predict数组&#xff0c;统计预测正确的数目&#xff0c;因为有两个嵌套的循环&#xff0c;使得时间…

各版本安卓的彩蛋一览

目录 前言前彩蛋纪Android 2.3 GingerbreadAndroid 3 HoneycombAndroid 4.0 Ice Cream SandwichAndroid 4.1-4.3 JellybeanAndroid 4.4 KitKatAndroid 5 LollipopAndroid 6 MarshmallowAndroid 7 NougatAndroid 8 OreoAndroid 9 PieAndroid 10 Queen CakeAndroid 11 Red Velvet…

分享66个相册特效,总有一款适合您

分享66个相册特效&#xff0c;总有一款适合您 66个相册特效下载链接&#xff1a;https://pan.baidu.com/s/1jqctaho4sL_iGSNExhWB6A?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不…

【Java EE初阶十】多线程进阶二(CAS等)

1. 关于CAS CAS: 全称Compare and swap&#xff0c;字面意思:”比较并交换“&#xff0c;且比较交换的是寄存器和内存&#xff1b; 一个 CAS 涉及到以下操作&#xff1a; 下面通过语法来进一步进项说明&#xff1a; 下面有一个内存M&#xff0c;和两个寄存器A,B; CAS(M,A,B)&am…

社区店营销新趋势:如何吸引并留住顾客?

作为一名资深的鲜奶吧创业者&#xff0c;我已经在这个行业摸爬滚打了五年。 这五年的时间&#xff0c;我见证了社区店营销的变迁&#xff0c;也积累了一些关于如何吸引并留住顾客的经验。今天&#xff0c;我想和大家分享一些留住顾客的核心干货。&#xff08;可以点赞收藏&…

YOLOv8改进 | 检测头篇 | 独创RFAHead检测头超分辨率重构检测头(适用Pose、分割、目标检测)

一、本文介绍 本文给大家带来的改进机制是RFAHead,该检测头为我独家全网首发,本文主要利用将空间注意力机制与卷积操作相结合的卷积RFAConv来优化检测头,其核心在于优化卷积核的工作方式,特别是在处理感受野内的空间特征时。RFAConv主要的优点就是增加模型的特征提取能力,…

MATLAB实现LSTM时间序列预测

LSTM模型可以在一定程度上学习和预测非平稳的时间序列&#xff0c;其具有强大的记忆和非线性建模能力&#xff0c;可以捕捉到时间序列中的复杂模式和趋势[4]。在这种情况下&#xff0c;LSTM模型可能会自动学习到时间序列的非平稳性&#xff0c;并在预测中进行适当的调整。其作为…

股票均线的使用方法和实战技术,看涨看空的均线形态与案例教学

一、教程描述 本套教程讲解了14种均线的特殊形态&#xff0c;通过直观图形以及大量案例的教学&#xff0c;将深奥、繁琐的均线变得生动与具体&#xff0c;广大投资者在认真学习以后&#xff0c;可以学会均线的使用方法&#xff0c;掌握最强的均线应用实战技术。本套教程不仅适…

Qt可视化大屏布局

科技大屏现在非常流行&#xff0c;这里分享一下某个项目的大屏布局&#xff08;忘了源码是哪个博主的了&#xff09; 展示 这个界面整体是垂直布局&#xff0c;分为两个部分&#xff0c;标题是一个部分&#xff0c;然后下面的整体是一个layout布局&#xff0c;为另外一部分。 l…

Shell脚本系列| SSH分发公钥方法 - expect脚本的使用

ssh原理&#xff1a;在SSH安全协议的原理中&#xff0c; 是一种非对称加密与对称加密算法的结合。用于确保远程登录和其他网络服务的会话安全&#xff0c;通过非对称加密、会话加密、多重验证机制等手段&#xff0c;保护数据传输的机密性和完整性。 ssh登录有2种方法&#xff1…

图书商城系统

文章目录 图书商城系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目&#xff08;9.9&#xffe5;带走&#xff09; 图书商城系统 一、项目演示 网上书城 二、项目介绍 基于SSM的图书商城网站 运行环境:idea或eclipse 数据库:mysql 开发语…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Web组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之Web组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Web组件 提供具有网页显示能力的Web组件&#xff0c;ohos.web.webview提供web控制能…

4. TypeScript

目录 1 TypeScript 介绍 2 TypeScript 常用类型 2.1 类型标注的位置 2.2 字符串、数字、布尔类型 2.3 字面量类型 2.4 interface 类型 2.5 class 类型 Vue1&#xff1a;基础跟使用方式 Vue2&#xff1a;路由方面 Vue3&#xff1a;状态管理 vuex 状态管理库 1 TypeScrip…

鸿蒙原生应用再添新丁!央视新闻 入局鸿蒙

鸿蒙原生应用再添新丁&#xff01;央视新闻 入局鸿蒙 来自 HarmonyOS 微博2月9日消息&#xff0c;#央视新闻启动鸿蒙原生应用开发#中央广播电视总台旗舰央视新闻客户端正式宣布&#xff0c;将基于HarmonyOS NEXT鸿蒙星河版&#xff0c;启动央视新闻 鸿蒙原生应用开发&#xf…

springboot微信小程序 uniapp学习资料分享系统v9uy4

理论意义 当今网络教学已成为各国教育改革 和发展的趋势。因此&#xff0c;构建一个适合交互式课堂教学模式的教学平台就成了当务之 急。 在国内高校&#xff0c;目前交互平台主要用于网络学院的远程教学&#xff0c;至于校园内的正规教学&#xff0c;老师自发建立课程主页的比…

Web后端开发:事务与AOP

事务管理 在学习数据库时&#xff0c;讲到&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求&#xff0c;要么同时成功&#xff0c;要么同时失败。 事务的操作主要有三…

VUE学习——数组变化侦测

官方文档 变更方法&#xff1a; 使用之后&#xff0c;ui可以直接发生改变。改变原数组 替换数组&#xff1a; 使用之后需要接受重新赋值&#xff0c;不然ui不发生改变。不改变原数组

深度学习的进展及其在各领域的应用

深度学习&#xff0c;作为人工智能的核心分支&#xff0c;近年来在全球范围内引起了广泛的关注和研究。它通过模拟人脑的学习机制&#xff0c;构建复杂的神经网络结构&#xff0c;从大量数据中学习并提取有用的特征表示&#xff0c;进而解决各种复杂的模式识别问题。 一、深度…