mysql——explain命令简介
来源:互联网 发布:swift完整项目源码 编辑:程序博客网 时间:2024/06/03 14:53
参考网址:http://blog.csdn.net/b1303110335/article/details/51174540
在这里对explain的各个字段进行详细的分析,来帮助大家分析自己所写的sql是否最佳的使用了索引。
首先是select_type:将select查询分为简单(simple)和复杂两种类型 。
复杂类型又分为子查询(subquery)和from列表中包含子查询(drived)
simple:
drived:
type字段进行详细的介绍:类型分别有以下几种:
System,const,eq_ref,ref,range,index,all
all : 即全表扫描
index : 按索引次序扫描,先读索引,再读实际的行,结果还是全表扫描,主要优点是避免了排序。因为索引是排好的。
range:以范围的形式扫描。
explain select * from a where a_id > 1\G
ref:非唯一索引访问(只有普通索引)
create table a(a_id int not null, key(a_id));
insert into a values(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
mysql> explain select * from a where a_id=1\G
eq_ref:使用唯一索引查找(主键或唯一索引)
const:常量查询
在整个查询过程中这个表最多只会有一条匹配的行,比如主键 id=1 就肯定只有一行,只需读取一次表数据便能取得所需的结果,且表数据在分解执行计划时读取。
当结果不是一条时,就会变成index或range等其他类型
system:系统查询
null:优化过程中就已经得到结果,不在访问表或索引
possible_keys:可能用到的索引
key:实际用到的索引
key_line:索引字段最大可能使用长度
ref:指出对 key 列所选择的索引的查找方式,常见的值有 const, func, NULL, 具体字段名。当 key 列为 NULL ,即不使用索引时,此值也相应的为 NULL 。
rows:估计需要扫描的行数
Extra:显示以上信息之外的其他信息
Using index
此查询使用了覆盖索引(Covering Index),即通过索引就能返回结果,无需访问表。
若没显示"Using index"表示读取了表数据。
Using where
表示 MySQL 服务器从存储引擎收到行后再进行“后过滤”(Post-filter)。所谓“后过滤”,就是先读取整行数据,再检查此行是否符合 where 句的条件,符合就留下,不符合便丢弃。因为检查是在读取行后才进行的,所以称为“后过滤”。
Using temporary
使用到临时表
建表及插入数据:
create table a(a_id int, b_id int);
insert into a values(1,1),(1,1),(2,1),(2,2),(3,1);
mysql> explain select distinct a_id from a\G
Extra: Using temporary
MySQL 使用临时表来实现 distinct 操作。
Using filesort
若查询所需的排序与使用的索引的排序一致,因为索引是已排序的,因此按索引的顺序读取结果返回,否则,在取得结果后,还需要按查询所需的顺序对结果进行排序,这时就会出现 Using filesort 。
select * from a order by id;
对于没有索引的列进行order by 就会出现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 命令详解学习
- Detect Capital
- Android线程池的使用方法
- 调试---2.拨号
- QT QPushButton 通过stylesheet 设置样式
- EhCache,memcache,redis知识介绍,原文地址:http://blog.csdn.net/jationxiaozi/article/details/8509732
- mysql——explain命令简介
- 竖式问题
- RxSwift使用教程
- Android NDK
- 基于JQuery的购物车添加删除以及结算功能
- 多线程2
- Linux简介及Ubuntu安装
- linux 查看线程状态
- Android layout属性大全