IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL的Explain说明 -> 正文阅读

[大数据]MySQL的Explain说明

MySQL的Explain使用

作用

可以帮助你分析你的慢SQL的执行细节,找出慢的根源,进而进行优化

分析

image-20220525134037259

从图中可以看到执行结果,接下来按照每列进行解释:

id列:select查询的序列号,代表的是select执行的顺序,有以下几种情况

  • 规则一:id相同时,则按照从上到下依次执行
  • 规则二:id不同时,id值越大优先级越高,越先被执行
  • 规则三:id有相同有不同,则相同的id为一个组,不同组的id值按照规则二的优先级执行,同组id则按照规则一依次执行

id列越大执行优先级越高,id相同则从上往下执行,id为NULL最后执行

select_type列:查询的类型

  • SIMPLE:表示该查询没有子查询和UNION连接查询
  • PRIMARY:有子查询时的最外层查询
  • SUBQUERY:有子查询时的内层嵌套查询
  • DERIVED:在from中包含的select称为derived(衍生) ,mysql会递归这些子查询,把结果放在临时表中
  • UNION:union的第二个或者最后一个
  • UNION RESULT:union的结果

table列:执行当前SQL语句用到的表

partitions列:代表当前表所使用的分区

type列:显示使用了哪种查询,查询效率排序为system > const > eq_ref > ref > range > index > all

  • system、const:mysql能队这部分进行查询优化,使能够将其转换成一个常量(system只返回一行,const有多行),如某一行的主键放入WHERE子句里的方式来选取此行的主键,mysql就能讲这个查询转换成一个常量,然后高效的将表从连接执行中移除。
  • eq_ref: 使用该索引查找,mysql最多返回一条数据,可以在使用主键或者唯一性索引查找时用到
  • ref:非唯一性索引的索引查找
  • range:范围扫描,例如带有between或者 >,<,in 等
  • index:扫描所有索引行
  • all:扫描所有数据行

possible_keys列:代表可能用到的索引和实际用到的索引

key列:显示mysql实际采用哪个索引优化对该表的查询

key_len列:在索引中使用的字节数,通过这个值可以算出具体使用了索引中哪些字段

key_len计算规则:

  • 字符串
    • char(n):n字节长度
    • varchar(n):需要占用2字节存储字符串长度,如果字符类型为utf8,则长度为3n+2
  • 数值类型
    • tinyint:1字节
    • smallint:2字节
    • int:4字节
    • bigint:8字节
  • 时间类型
    • date:3字节
    • timestamp:4字节
    • datetime:8字节
  • 如果字符允许为null,需要1字节记录是否为null

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

ref列:显示在key列记录的索引中,表查询值所用到的列或常量,常见的有const(常量),字段名

rows:是mysql估计要读取并检测的行数(不是结果集里的行数)

filtered:是一个百分比值,和rows列的值一起使用,可以估计出那些将要和QEP中的前一个表进行连接的行数。前一个表是指id列的值比当前表的id小的表

Extra:显示额外信息,常见值有:Using index,Using where,Using where Using index,null

  • Using index:查询的列被索引覆盖,并且where筛选条件是索引的前导列,是性能高的表现。一般是使用了覆盖索引(索引包含查询的所有字段),对于innodb来说,如果是辅助索引性能会有不少提升。
  • Using where:查询的列未被索引覆盖,where筛选条件非索引的前导列。
  • Using where Using index:查询的列未被索引覆盖,并且where筛选条件是索引列之一,但不是索引的前导列,一位置无法直接通过索引查找来查询数据。
  • NULL:查询的列未被索引覆盖,并且where筛选条件是索引的前导列,意味着用到了索引,但是部分字段未被索引覆盖,必须通过回表实现,不是纯粹的用到了索引,也不是完全没有用到索引
  • Using index condition:与Using where类型,查询的列不完全被索引覆盖,where条件中是一个前导列的查询范围。
  • Using temporary:mysql需要创建一张临时表来处理查询,出现这种情况一般要进行优化
  • Using filesort:mysql会对结果使用一个外部索引排序,而不是按索引次序从表里读取行,此时mysql会根据连接类型浏览符合条件的记录,并保存排序关键字和行指针,然后排序关键字并按顺序检索行信息,这种情况下一般需要考虑使用索引来优化查询。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 01:18:22  更:2022-09-04 01:21:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:08:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码