Mysql explain
来源:互联网 发布:伊朗f313知乎 编辑:程序博客网 时间:2024/06/07 17:49
说明
explain命令是查看查询优化器如何决定执行查询的主要方法.
调用方式
explain select * from table (mysql5.6开始支持 update等 非select操作)
会显示下图的数据,列是固定的.
列说明
id列
编号,标识select所属的行. 如果语句中没有子查询,关联表查询,那么只会有唯一的select,每一行在这个列都显示 1 , 否则 select语句一般会顺序编号,对应其在原始语句中的位置.
select_type列
table 列
输出行所引用的表名或者别名
type 列
All
从头到尾,全表扫描
index
跟全表扫描一样,不过mysql扫描是按照的索引顺序而不是行顺序(非自然排序),通常情况会按照索引顺序访问行,产生随机行文本,开销很大,可以避免排序.
如果在extra列中看到 using index ,说明 正在使用覆盖索引,只扫描索引的数据,而不是行数据,开销会小很多
range
范围扫描就是一个有限制的索引扫描.
只检索给定范围的行,使用一个索引来选择 行。key 列显示使用了哪个索引。当使用=、 <>、>、>=、<、<=、IS NULL、<=>、BETWEEN 或者 IN 操作符,用常量比较关键字列时,可 以使用 range。
ref
索引访问,查找和扫描的混合体. where条件的查找使用索引就是最明显的例子.
eq_ref , const , system
索引访问,mysql最多返回一条数据,多用于唯一索引查找
null
优化过程中就已经得到结果,不在访问表或索引
possible_keys 列
这一列显示了mysql可以使用哪些索引
key 列
mysql决定采用哪个索引来对表进行访问,有可能索引并不是在 possible_keys 列中
例如选择了覆盖索引
ken_len 列
显示mysql在索引字段中可能的最大长度,而不是表中数据使用的实际字节数.
ref 列
显示索引的哪一列被使用了
rows 列
mysql 估计为了找到所需要的数据而读取的行数,某些时候可以用来获取大概值,比如统计在线人数,不需要很精确的情况下.
filtered 列
mysql5.1里新加的,使用explain extended 时出现.
所显示的是表里面某个条件的记录数的百分比所作的悲观估算
extra 列
常见如下:
using index
表示mysql使用覆盖索引,避免访问表.
using where
表示 MySQL 服务器从存储引擎收到行后再进行“后过滤”(Post-filter)。所谓“后过滤”,就是先读取整行数据,再检查此行是否符合 where 句的条件,符合就留下,不符合便丢弃。因为检查是在读取行后才进行的,所以称为“后过滤”。
using temporary
使用到临时表
using filesort
若查询所需的排序与使用的索引的排序一致,因为索引是已排序的,因此按索引的顺序读取结果返回,否则,在取得结果后,还需要按查询所需的顺序对结果进行排序,这时就会出现 Using filesort 。
- MYSQL explain
- MYSQL Explain
- mysql explain
- mysql explain
- mysql explain
- MySQL Explain
- Mysql EXPLAIN
- mysql explain
- mysql explain
- mysql explain
- mysql explain
- MYSQL EXPLAIN
- mysql explain
- mysql explain
- mysql explain
- mysql explain
- mysql-explain
- mysql-explain
- Android zxing,轻松实现二维码扫描、生成
- 哈希表知识梳理
- web开发-阿里云多用户登录Windows server 2008 R2服务器设置-学习笔记十
- android studio 将引用第三方jar和.so的项目打包jar并混淆
- 题解——Leetcode 8. String to Integer (atoi) 难度:Medium
- Mysql explain
- java存储用户信息用MD5对密码加密
- 计算机网络面试范围
- nginx学习2——ubuntu下配置nginx
- html与xhtml的不同
- 杂项设备驱动
- 项目从Myeclipse 导入到eclipse中无法识别为 web项目 的问题
- VMware网络模式介绍
- 阅读理解FireFox浏览器插件开发文档(一)