explain 查看sql的执行计划,使用该关键字可以查看分析sql 语句在 mysql 中的执行步骤,索引的使用,可以检查该sql 语句和表结构的性能瓶颈,在sql 优化中工作可以说该关键字是相关开发工作人员必会的。

用法: explain 查询语句;
​​

explain 返回结果说明

  • 1. id
  • 2. select_type
  • 3. table
  • 4. partitions
  • 5. type
  • 6. possible_keys
  • 7. key
  • 8. key_len
  • 9. ref
  • 10. row
  • 11. filtered
  • 12. Extra

1. id


通过该id字段,可以查看出sql语句的执行顺序

id 相同, 查询执行表顺序由上至下

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

    id 有的相同有的不同,则id序号大的会优先执行,id相同的由上到下执行

2. select_type

查询sql的类型

类型 说明
SIMPLE 简单的select查询,查询中不包含子查询或UNION
PRIMARY 查询中若包含如何复杂的子查询,最外层标记为 PARIMARY,一般最后加载的表
SUBQUERY 在select 或 where 列表中包含子查询语句
DERIVED 在from 列表中包含的子查询标记为DERIVED (衍生) mysql 会递归执行这些查询,把结果集放在临时表中
UNION 出现在 UNION 之后的查询语句会被标记为 UNION, 若UNION包含在FROM 子句的子查询中,外层SELECT将被标记为DERIVED
UNION RESULT UNION 查询的结果集

3. table

    查询的表名称,显示所查询的表名称,如果要是别名则显示别名,衍生表显示<derived>

4. partitions

如果查询是基于分区表的话,会显示查询将访问的分区。

5. type

查询数据的类型,性能由好到差排列

  system > const > eq_ref > ref > fultext > ref_or_null > index _merge > unique_subquery >  index_subquery > range > index >ALL
system 表只能一行记录(等于系统表),const类型的特列,平时基本不会出现。
const 表示通过索引一次就能找到,const用于比较parmary_key 或者 unique 索引,因为只匹配一行数据,所以主键至于where列表中,mysql就能将该查询转换为一个常量
eq_ref 唯一性索引扫描,对每个索引建,表中只有一条记录与之匹配,常建于主键或唯一索引扫描
ref 非唯一性索引扫描,返回匹配某个单独值的所有行本质上也是一种索引访问,他返回所有匹配某个单独值的行,然而,他可能会出现找到多个符合条件的行,所以他应该属于查找和扫描的混合体
range 只检索指定范围的行,使用一个索引来选择行,key 列显示使用了那个索引一般就是在where语句出现了between、<、>、in等的查询。这种范围扫描索引比扫描全表要好,因为扫描的只是某个范围区间。
index full index sacn,index 与all的区别是,index类型只遍历索引树,通常比all快。因为索引文件通常比数据文件小.
all full table sacn,将遍历全表以找到匹配的行

6. possible_keys

    列出查询sql可能会用到的索引,该值可能会一个或多个,但不一定在实际查询中被用到

7. key

    列出查询sql中实际被使用到的索引,显示null 则没有使用索引

8. key_len

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

9. ref

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

10. row

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

11. filtered

查询条件过滤的行数的百分比

12. Extra

包含不适合在其它列中显示但十分重要的额外信息
Using filesort 说明mysql会对数据使用一个外部的索引排序,而不是按照表内的索引顺序进行读取,mysql 中无法利用索引完成的排序操作称为 ‘文件内排序’
Using temporary 使用临时表保存中间结果,mysql 在对查询结果排序的时候使用了临时表,常见于排序 order by
Using index 表示相应的select 操作中使用了复合索引,避免访问了表的数据行,效率不错。如果同时出现了 using where,表明索引被用来执行索引键值查找;如果没有同时出现using where,表明索引用来读取数据而非执行查找动作。
Using where 使用了where 过滤
Using join buffer 使用了连接缓存
impossible where where子句的值总是false,不能获取任何数据
select tables optimized away 在没有group by 子句的情况下,基于索引优化MIN/MAX操作或者myisam存储引擎优化count(*)操作,不必等到执行阶段在进行计算,查询执行计划生成的阶段即完成优化

mysql中的 explain 关键字学习笔记相关推荐

  1. 《MySQL实战45讲》——学习笔记04-05 “深入浅出索引、最左前缀原则、索引下推优化“

    04 | 深入浅出索引(上) 1. 什么是索引? 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样,书有500页,每页存的都是书的内容,目录可能只有5页,只存了页码:通过目录能快速找到某个主 ...

  2. 《MySQL实战45讲》——学习笔记01-03 “MySQL基本架构、日志系统、事务隔离“

    最近有新闻说"丁奇"炒股失败欠债,赶紧去极客时间买了他的<MySQL 实战 45 讲>以防下架,顺带重新系统的复习下MYSQL相关知识,记录下学习笔记: 本篇介绍: M ...

  3. Mysql中的explain查看执行计划

    Mysql中的explain查看执行计划 1.explain是什么? 查看执行计划. 2.怎么使用? explain + sql语句. 3.执行计划包含的信息: id,select_type,tabl ...

  4. 《MySQL实战45讲》——学习笔记12 “InnoDB刷脏页的控制策略“

    本篇介绍MYSQL InnoDB的WAL机制带来的小问题--利用WAL技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能,但也带来了内存脏页的问题: 脏页会被后台线程自动flush,也会由于数 ...

  5. MySQL中的联合索引学习教程

    MySQL中的联合索引学习教程 这篇文章主要介绍了MySQL中的联合索引学习教程,其中谈到了联合索引对排序的优化等知识点,需要的朋友可以参考下 联合索引又叫复合索引.对于复合索引:Mysql从左到右的 ...

  6. 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)

    数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...

  7. C++ 中 参数包 (typename ...) 学习笔记

    C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...

  8. web前端分享HTML5中的nav标签学习笔记

    好程序员web前端分享HTML5中的nav标签学习笔记,nav标签全称navigation,顾名思义,是导航的意思.根据HTML5的相关标准定义如下: "A section of a pag ...

  9. java中volatile关键字---学习笔记

    volatile关键字的作用 在java内存模型中,线程之间共享堆内存(对应主内存),但又各自拥有自己的本地内存--栈内存,线程的栈内存中缓存有共享变量的副本,但如果是被volatile修饰的变量,线 ...

最新文章

  1. 209计算机考试题库,计算机考试题库:计算机考试模拟练习题(209)
  2. 千亿化妆品市场规模背后,女人正在失去不化妆的权利
  3. Git 的介绍使用以及简单操作流程
  4. opencv 通过网络连接工业相机_Raspberry Pi上的OpenVINO,OpenCV和Movidius NCS
  5. .NET Core之只是多看了你一眼
  6. 创业公司技术总监,去大公司面试,结果凉了
  7. Magento: 根据产品属性加载产品信息 Load A Category or Product by an Attribute
  8. 2、使用Spring框架能带来哪些好处
  9. java把map值放入vector_Thinking in java基础之集合框架
  10. 迅雷/快车/旋风地址转换器
  11. AngularJs学习笔记--html compiler
  12. L1-067 洛希极限 (10 分)-PAT 团体程序设计天梯赛 GPLT
  13. gamma分布 pytorch_pytorch之添加BN的实现
  14. XML文件怎么转换成Excel表格文件
  15. 【 地图系列 】 中国各省市县级 JSON 文件
  16. C11语言比C99,C11相比C99的变化
  17. 【Scratch案例实操】scratch大鱼吃小鱼(完整详案) scratch编程案例教学 scratch创意编程 少儿编程教案
  18. 5万成员丨CSDN 大数据领域网红社区!
  19. Spring Cloud基础教程 - 程序猿DD
  20. python:修改图片的尺寸

热门文章

  1. java jdbc 工具_实现JDBC的工具类
  2. linux的dns的转发域,Linux DNS服务器子域授权、转发器和转发域配置实例(三)
  3. python文件信息排序_python文件排序的方法总结
  4. vb.net usb通用协议api_充电头百花齐放不通用,热门全协议充电头盘点,充电问题一站搞定...
  5. python公共基础知识整理_python基础知识整理——字符串
  6. 套用match_再也不用伤脑筋了,分享九个可以直接套用的Excel常用公式,收藏备用...
  7. 汇编转c语言,如何把汇编语言转换成C语言
  8. 节流与防抖【从0到0.1】
  9. 深拷贝——将对象拷贝到底
  10. iOS中系统自带正则表达式的应用