Mysql Explain

1、是什么

使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是
如何处理你的SQL语句的。分析你的查询语句或是结构的性能瓶颈

2、能干嘛

1、表的读取顺序
2、数据读取操作的操作类型
3、哪些索引可以使用
4、哪些索引被实际使用
5、表之间的引用
6、每张表有多少行被优化器查询

3、使用

Explain+SQL语句
执行计划包含的信息

4、各字段解释

【id】

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

分为三种情况:
id相同,执行顺序由上至下

id不同,如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行

id相同不同,同时存在

【select_type】

1、有哪些

2、查询的类型,主要用于区别普通查询、联合查询、子查询等的复杂查询
2.1、SIMPLE:简单的select查询,查询中不包含子查询或者UNION
2.2、PRIMARY:查询中若包含任何复杂的子部分,最外层查询则被标记为
2.3、SUBQUERY:在SELECT或者WHERE列表中包含了子查询
2.4、DERIVED:在FROM列表中包含的子查询被标记为DERIVED(衍生)
MySQL会递归执行这些子查询,把结果放在临时表里。
2.5、UNION:若第二个SELECT出现在UNION之后,则被标记为UNION;
若UNION包含在FROM子句的子查询中,外层SELECT将被标记为:DERIVED
2.6、UNION RESULT:从UNION表获取结果的SELECT

【table】

显示这一行的数据是关于哪张表的

【type】

显示查询使用了何种类型
从最好到最差依次是:
system>const>eq_ref>ref>range>index>ALL
1、system:表只有一行记录(等于系统表),这是const类型的特例,平时不会出现,这个也可以忽略不计
2、const:表示通过索引一次就找到了,const用于比较primary key或者unique索引。因为只匹配一行数据,所以很快。如将主键至于where列表中,MySQL就能将该查询转换为一个常量
3、eq_ref:唯一性索引,对于每个索引键,表中只有一条记录与之匹配,常见于主键或唯一索引扫描
4、ref:非唯一索引扫描,返回匹配某个单独值的所有行。
本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而,
它可能会找到多个符合条件的行,所以他应该属于查找和扫描的混合体
5、range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引
一般就是在你的where语句中出现了between、<、>、in等的查询
这种范围扫描索引扫描比全表扫描要好,因为他只需要开始索引的某一点,而结束语另一点,不用扫描全部索引
6、index:Full Index Scan,index与ALL区别为index类型只遍历索引树。这通常比ALL快,因为索引文件通常比数据文件小。
(也就是说虽然all和index都是读全表,但index是从索引中读取的,而all是从硬盘中读的)
7、all:FullTable Scan,将遍历全表以找到匹配的行
备注:一般来说,得保证查询只是达到range级别,最好达到ref

【possible_keys】

显示可能应用在这张表中的索引,一个或多个。
查询涉及的字段上若存在索引,则该索引将被列出,但不一定被查询实际使用

【key】

实际使用的索引。如果为null则没有使用索引
查询中若使用了覆盖索引,则索引和查询的select字段重叠

【key_len】

表示索引中使用的字节数,可通过该列计算查询中使用的索引的长度。在不损失精确性的情况下,长度越短越好
key_len显示的值为索引最大可能长度,并非实际使用长度,即key_len是根据表定义计算而得,不是通过表内检索出的

【ref】

显示索引那一列被使用了,如果可能的话,是一个常数。那些列或常量被用于查找索引列上的值

【rows】

根据表统计信息及索引选用情况,大致估算出找到所需的记录所需要读取的行数

【partitions】

版本5.7以前,该项是explain partitions显示的选项,5.7以后成为了默认选项。该列显示的为分区表命中的分区情况。非分区表该字段为空(null)。

【filtered】

使用explain extended时会出现这个列,5.7之后的版本默认就有这个字段,不需要使用explain extended了。这个字段表示存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例,注意是百分比,不是具体记录数。

【Extra】

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

1.Using filesort

说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取。
MySQL中无法利用索引完成排序操作成为“文件排序”

2.Using temporary

使用了临时表保存中间结果,MySQL在对查询结果排序时使用临时表。常见于排序order by 和分组查询 group by

3.USING index

表示相应的select操作中使用了覆盖索引(Coveing Index),避免访问了表的数据行,效率不错!
如果同时出现using where,表明索引被用来执行索引键值的查找;
如果没有同时出现using where,表面索引用来读取数据而非执行查找动作。

覆盖索引(Covering Index)

4.Using where

表面使用了where过滤

5.using join buffer

使用了连接缓存

6.impossible where

where子句的值总是false,不能用来获取任何元组

7.select tables optimized away

在没有GROUPBY子句的情况下,基于索引优化MIN/MAX操作或者
对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,
查询执行计划生成的阶段即完成优化。

8.distinct

优化distinct,在找到第一匹配的元组后即停止找同样值的工作

三、Mysql高级学习笔记之EXPLAN相关推荐

  1. Mysql 高级学习笔记

    Mysql 高级学习笔记 文章目录 Mysql 高级学习笔记 一.Mysql 基础 1. 聚合函数 2. having 3. sql 的执行顺序 4. 约束 5. 试图 二.Mysql 高级 1. M ...

  2. MySQL高级学习笔记(四)

    文章目录 MySQL高级学习笔记(四) 1. MySql中常用工具 1.1 mysql 1.1.1 连接选项 1.1.2 执行选项 1.2 mysqladmin 1.3 mysqlbinlog 1.4 ...

  3. 尚硅谷MySQL高级学习笔记

    数据库MySQL学习笔记高级篇 文章目录 数据库MySQL学习笔记高级篇 写在前面 1. mysql的架构介绍 mysql简介 概述 高级Mysql mysqlLinux版的安装 mysql配置文件 ...

  4. 尚硅谷MySQL高级学习笔记 -- 1.MySQL 的架构介绍

    1.MySQL 简介 什么是 MySQL? MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中 ...

  5. mysql高级学习笔记

    索引 帮助mysql高效获取数据的数据结构 缺点:降低了更新表的效率,增加了磁盘开销. B树和B+树 m叉的B数每个节点最多包含m-1个key,而B+数最多m个key B+树的叶子节点保存了所有的ke ...

  6. 研一寒假MySQL数据库学习笔记(三)

    研一寒假MySQL数据库学习笔记(三) 本节记录数据库高级查询部分的内容,整理于此便于之后回顾. 1. 上一节补充内容 1.1 案例练习 现在有一个员工表.部门表,两张表之间是一个部门多个员工,一个员 ...

  7. MySQL语法学习笔记

    MySQL语法学习笔记 学习之道,非尽心竭力者不能进也!我是小七黛,欢迎查看我的笔记,有问题欢迎交流探讨. SQL是一种结构查询语言,用于查询关系数据库的标准语言,包括若干关键字和一致的语法,便于数据 ...

  8. JAVA基础与高级学习笔记

    JAVA基础与高级学习笔记 /记录java基础与高级,除了较简单的内容,没有必要记录的没有记录外,其余的都记录了/ java初学者看这一篇就够了,全文 6万+ 字. JAVA基础 java会出现内存溢 ...

  9. 尚学堂JAVA高级学习笔记_1/2

    尚学堂JAVA高级学习笔记 文章目录 尚学堂JAVA高级学习笔记 写在前面 第1章 手写webserver 1. 灵魂反射 2. 高效解析xml 3. 解析webxml 4. 反射webxml 5. ...

最新文章

  1. Stack Overflow被收购了,以后要付费“抄代码”?
  2. Javascript中的对象和原型(一)(转载)
  3. 分布式缓存Redis介绍
  4. 深度学习(33)随机梯度下降十一: TensorBoard可视化
  5. 不会几个框架,都不好意思说搞过前端: Vue.js - 60分钟快速入门
  6. 移动端相关 em rem px 区别和关联
  7. vs code的tabs模式的终端
  8. iPad mini 6外形巨变:升级全面屏 还要砍掉Home键
  9. 导航类查询词的收集方法
  10. 【微信服务号开发】01.接入指南
  11. Python基础-文件操作
  12. python pip 重新安装mysql_解决Ubuntu pip 安装 mysql-python包出错的问题
  13. 问题-Ctrl+F7跟踪值时提示“Function to be called, TGGLPolyhedron3d.AsString, was eliminated by linker”...
  14. Java菜鸟的初次实习经历
  15. C语言串口一直接收00,串口助手一直接收00;
  16. 浏览器内核控制Meta标签说明文档(360浏览器默认极速模式)
  17. 设正整数n的十进制表示为n=ak……a1a0(0=ai=9,0=i=k,ak!=0),n的个位为起始数字的数字的正负交错之和T(n)=a0+a1+……+(-1)kak,证明:11|n的充分必要...
  18. zlib——Usage Example翻译
  19. 互联网周刊:Web 3.0还有多远
  20. Docker——入门实战

热门文章

  1. SparkCore项目实战 需求一Top10热门品类 需求二Top10热门品类下每个品类的Top10活跃用户统计 需求三计算页面单跳转换率
  2. java aes 256 ecb解密_Java AES 256 解密
  3. iOS实现头像选取(照相或者图片库)、大小等比缩放、生成圆形头像
  4. 开源的动态人脸识别项目
  5. 练好敲代码的内功——初识数据储存
  6. Elasticsearch中ngram和edgengram分词器
  7. 你的2022届暑假实习都怎样了?
  8. Python日常办公10大小技巧
  9. IXwebhosting怎样主机避免资源超标
  10. 计算器之webservice实现