mysql中的 explain 关键字学习笔记
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 关键字学习笔记相关推荐
- 《MySQL实战45讲》——学习笔记04-05 “深入浅出索引、最左前缀原则、索引下推优化“
04 | 深入浅出索引(上) 1. 什么是索引? 索引的出现其实就是为了提高数据查询的效率,就像书的目录一样,书有500页,每页存的都是书的内容,目录可能只有5页,只存了页码:通过目录能快速找到某个主 ...
- 《MySQL实战45讲》——学习笔记01-03 “MySQL基本架构、日志系统、事务隔离“
最近有新闻说"丁奇"炒股失败欠债,赶紧去极客时间买了他的<MySQL 实战 45 讲>以防下架,顺带重新系统的复习下MYSQL相关知识,记录下学习笔记: 本篇介绍: M ...
- Mysql中的explain查看执行计划
Mysql中的explain查看执行计划 1.explain是什么? 查看执行计划. 2.怎么使用? explain + sql语句. 3.执行计划包含的信息: id,select_type,tabl ...
- 《MySQL实战45讲》——学习笔记12 “InnoDB刷脏页的控制策略“
本篇介绍MYSQL InnoDB的WAL机制带来的小问题--利用WAL技术,数据库将随机写转换成了顺序写,大大提升了数据库的性能,但也带来了内存脏页的问题: 脏页会被后台线程自动flush,也会由于数 ...
- MySQL中的联合索引学习教程
MySQL中的联合索引学习教程 这篇文章主要介绍了MySQL中的联合索引学习教程,其中谈到了联合索引对排序的优化等知识点,需要的朋友可以参考下 联合索引又叫复合索引.对于复合索引:Mysql从左到右的 ...
- 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)
数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...
- C++ 中 参数包 (typename ...) 学习笔记
C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...
- web前端分享HTML5中的nav标签学习笔记
好程序员web前端分享HTML5中的nav标签学习笔记,nav标签全称navigation,顾名思义,是导航的意思.根据HTML5的相关标准定义如下: "A section of a pag ...
- java中volatile关键字---学习笔记
volatile关键字的作用 在java内存模型中,线程之间共享堆内存(对应主内存),但又各自拥有自己的本地内存--栈内存,线程的栈内存中缓存有共享变量的副本,但如果是被volatile修饰的变量,线 ...
最新文章
- 209计算机考试题库,计算机考试题库:计算机考试模拟练习题(209)
- 千亿化妆品市场规模背后,女人正在失去不化妆的权利
- Git 的介绍使用以及简单操作流程
- opencv 通过网络连接工业相机_Raspberry Pi上的OpenVINO,OpenCV和Movidius NCS
- .NET Core之只是多看了你一眼
- 创业公司技术总监,去大公司面试,结果凉了
- Magento: 根据产品属性加载产品信息 Load A Category or Product by an Attribute
- 2、使用Spring框架能带来哪些好处
- java把map值放入vector_Thinking in java基础之集合框架
- 迅雷/快车/旋风地址转换器
- AngularJs学习笔记--html compiler
- L1-067 洛希极限 (10 分)-PAT 团体程序设计天梯赛 GPLT
- gamma分布 pytorch_pytorch之添加BN的实现
- XML文件怎么转换成Excel表格文件
- 【 地图系列 】 中国各省市县级 JSON 文件
- C11语言比C99,C11相比C99的变化
- 【Scratch案例实操】scratch大鱼吃小鱼(完整详案) scratch编程案例教学 scratch创意编程 少儿编程教案
- 5万成员丨CSDN 大数据领域网红社区!
- Spring Cloud基础教程 - 程序猿DD
- python:修改图片的尺寸
热门文章
- java jdbc 工具_实现JDBC的工具类
- linux的dns的转发域,Linux DNS服务器子域授权、转发器和转发域配置实例(三)
- python文件信息排序_python文件排序的方法总结
- vb.net usb通用协议api_充电头百花齐放不通用,热门全协议充电头盘点,充电问题一站搞定...
- python公共基础知识整理_python基础知识整理——字符串
- 套用match_再也不用伤脑筋了,分享九个可以直接套用的Excel常用公式,收藏备用...
- 汇编转c语言,如何把汇编语言转换成C语言
- 节流与防抖【从0到0.1】
- 深拷贝——将对象拷贝到底
- iOS中系统自带正则表达式的应用