Mysql Explain的简单使用
Mysql Explain
主要重要的字段有上面红色方框圈出来的那几个。
- type: 连接类型,一个好的SQL语句至少要达到range级别,杜绝出现all级别。
- key: 使用到的索引名,如果没有选择索引,值是NULL。可以采取强制索引方式。
- key_len: 索引长度。
- rows: 扫描行数,该值是一个预估值。
- extra: 详细说明,注意常见不太友好的值,如下:Using filesort, Using temporary.
Type
可能的值如下
- ALL: 最坏的情况,全表扫描。
- index: 和全表扫描一样。只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序, 但是开销仍然非常大。如在Extra列看到Using index,说明正在使用覆盖索引,只扫描索引的数据,它比按索引次序全表扫描的开销要小很多
- range: 范围扫描,一个有限制的索引扫描。key 列显示使用了哪个索引。当使用=、 <>、>、>=、<、<=、IS NULL、<=>、BETWEEN 或者 IN 操作符,用常量比较关键字列时,可以使用 range
- ref: 一种索引访问,它返回所有匹配某个单个值的行。此类索引访问只有当使用非唯一性索引或唯一性索引非唯一性前缀时才会发生。这个类型跟eq_ref不同的是,它用在关联操作只使用了索引的最左前缀,或者索引不是UNIQUE和PRIMARY KEY。ref可以用于使用=或<=>操作符的带索引的列。
- eq_ref: 最多只返回一条符合条件的记录。使用唯一性索引或主键查找时会发生 (高效)
- const: 当确定最多只会有一行匹配的时候,MySQL优化器会在查询前读取它而且只读取一次,因此非常快。当主键放入where子句时,mysql把这个查询转为一个常量(高效)
- system: 这是const连接类型的一种特例,表仅有一行满足条件。
- NULL: 意味说mysql能在优化阶段分解查询语句,在执行阶段甚至用不到访问表或索引(高效)
Key
key列显示MySQL实际决定使用的键(索引)。如果没有选择索引,键是NULL。要想强制MySQL使用或忽视possible_keys列中的索引,在查询中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。
Key_len
key_len列显示MySQL决定使用的键长度。如果键是NULL,则长度为NULL。使用的索引的长度。在不损失精确性的情况下,长度越短越好 。
Rows
rows列显示MySQL认为它执行查询时必须检查的行数。注意这是一个预估值。
Explain
可能的值如下
- Using filesort: MySQL有两种方式可以生成有序的结果,通过排序操作或者使用索引,当Extra中出现了Using filesort 说明MySQL使用了后者,但注意虽然叫filesort但并不是说明就是用了文件来进行排序,只要可能排序都是在内存里完成的。大部分情况下利用索引排序更快,所以一般这时也要考虑优化查询了。使用文件完成排序操作,这是可能是ordery by,group by语句的结果,这可能是一个CPU密集型的过程,可以通过选择合适的索引来改进性能,用索引来为查询结果排序。
- Using temporary: 用临时表保存中间结果,常用于GROUP BY 和 ORDER BY操作中,一般看到它说明查询需要优化了,就算避免不了临时表的使用也要尽量避免硬盘临时表的使用。
- Not exists: MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行, 就不再搜索了。
- Using index: 说明查询是覆盖了索引的,不需要读取数据文件,从索引树(索引文件)中即可获得信息。如果同时出现using where,表明索引被用来执行索引键值的查找,没有using where,表明索引用来读取数据而非执行查找动作。这是MySQL服务层完成的,但无需再回表查询记录。
- Using index condition: 这是MySQL 5.6出来的新特性,叫做“索引条件推送”。简单说一点就是MySQL原来在索引上是不能执行如like这样的操作的,但是现在可以了,这样减少了不必要的IO操作,但是只能用在二级索引上。
- Using where: 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。注意:Extra列出现Using where表示MySQL服务器将存储引擎返回服务层以后再应用WHERE条件过滤。
- Using join buffer: 使用了连接缓存:Block Nested Loop,连接算法是块嵌套循环连接;Batched Key Access,连接算法是批量索引连接
- impossible where: where子句的值总是false,不能用来获取任何元组
- select tables optimized away: 在没有GROUP BY子句的情况下,基于索引优化MIN/MAX操作,或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段再进行计算,查询执行计划生成的阶段即完成优化。
- distinct: 优化distinct操作,在找到第一匹配的元组后即停止找同样值的动作
转载于:https://www.cnblogs.com/Stay-J/p/10266087.html
Mysql Explain的简单使用相关推荐
- 简单了解SQL性能优化工具MySql Explain
点击上方蓝色字体,选择"设为星标" 优质文章,及时送达 写在前面 MySql Explain是对SQL进行性能优化不可或缺的工具,通过他我们可以对SQL进行一定的分析和性能优化,降 ...
- Mysql Explain 详解
Mysql Explain 详解 一.语法 explain < table_name > 例如: explain select * from t3 where id=3952602; 二. ...
- [转]MySQL Explain详解
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有 ...
- mysql extended_explain之三:MYSQL EXPLAIN语句的extended 选项学习体会,分析诊断工具之二...
MySQL 的explain命令有一个extended选项,我想可以很多人都没有注意,因为它对命令的输出结果没有任何改变,只是增加了一个warning.这个 warning中显示了MySQL对SQL的 ...
- MySQL - Explain深度剖析
文章目录 生猛干货 官方文档 Explain介绍 测试数据 explain 使用 explain重要列说明 id select_type simple primary subquery derived ...
- MYSQL:explain分析
mysql explain分析 通过explain可以知道mysql是如何处理语句,分析出查询或是表结构的性能瓶颈.通过expalin可以得到: 1. 表的读取顺序 2.表的读取操作的操作类型 3.哪 ...
- 对mysql explain讲的比较清楚的
对mysql explain讲的比较清楚的 explain结果的每行记录显示了每个表的相关信息,每行记录都包含以下几个字段: id 本次 select 的标识符.在查询中每个 select都有一个顺序 ...
- MySQL Explain详解,分析语句为何运行慢
MySQL Explain详解 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语 ...
- mysql explain用法和结果的含义
转载自https://www.cnblogs.com/yycc/p/7338894.html 转自:http://blog.chinaunix.net/uid-540802-id-3419311.ht ...
最新文章
- 最流行的解压缩软件--winrar
- pythonrgbd图片像素对齐_利用pyrealsense获取深度图,并进行像素对齐
- Java8 - 自定义实现体会Future的原理
- halcon的算子清点: Chapter 1 分类
- CV:基于深度学习实现目标检测之GUI界面产品设计并实现图片识别、视频识别、摄像头识别(准确度非常高)
- 4,postman和newman的联合使用
- 动态语言会淘汰静态语言吗?
- beginnersbook C 语言示例·翻译完成 | ApacheCN
- 能搞垮你的不止是同行
- 如何调位置_如何获得正确的驾驶坐姿?
- 数据结构与算法-浙江大学陈越数据结构第一章学习
- Windows javaw进程占用cpu资源100% 导致电脑卡顿
- 点点点工程师自我提升运维方向----shell编程基础知识盘点
- quot 成为通用计算机器 quot,汉语拼音:从读写工具到文化津梁
- 你知道你的手机上有哪些传感器吗?
- 运维高手的36项修炼_管理员工36项修炼
- ipad iphone开发_如何在iPhone或iPad上删除电子邮件
- 真无线蓝牙耳机性价比高?真无线蓝牙耳机性价比排行
- 监控100台RouterOS路由器的各个pppoe拨号失败的数目并钉钉通知
- WEEK 15 C ZJM 与纸条
热门文章
- 计算机语言恢复,win10系统找回消失不见语言栏的恢复方法
- Nodejs 新特性 async await 的使用 以及使用 async await 处理异步
- Web框架——Flask系列之模板使用练习(六)
- 六、MySQL DML数据操纵语言学习笔记(插入、修改、删除详解 + 强化复习)
- 天池 在线编程 最频繁出现的子串(字符串哈希)
- LeetCode 1689. 十-二进制数的最少数目(脑筋急转弯)
- LeetCode MySQL 618. 学生地理信息报告(row_number)
- LeetCode MySQL 1174. 即时食物配送 II
- LeetCode 685. 冗余连接 II(并查集)
- LeetCode 606. 根据二叉树创建字符串(递归)