在这里对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

转载:http://blog.csdn.net/b1303110335/article/details/51174540

转载于:https://www.cnblogs.com/xingkong001/p/7111245.html

mysql之explain详解(分析索引的最佳使用)相关推荐

  1. JAVA中Explain注解用法,mysql之explain详解(分析索引最佳使用)

    mysql之explain详解(分析索引最佳使用) mysql explain用于分析sql 语句的执行及数据库索引的使用.本文将致力于帮助大家充分理解explain所返回的各项参数,从而使大家快速掌 ...

  2. mysql之explain详解(分析索引最佳使用)

    mysql之explain详解(分析索引最佳使用) mysql explain用于分析sql 语句的执行及数据库索引的使用.本文将致力于帮助大家充分理解explain所返回的各项参数,从而使大家快速掌 ...

  3. Mysql之explain详解(超级全面)

    Mysql之explain详解(超级全面) 概念 explain能干嘛? 如何使用 输出字段解释 id(表的读取顺序) id相同,执行顺序由上至下 id不同,如果是子查询,id的序号会递增,id值越大 ...

  4. php mysql explain_MySQL Explain详解

    MySQL Explain详解 在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语 ...

  5. Mysql的explain详解

    使用mysql提供的explain命令来查询sql语句的执行计划,查看sql语句有没有使用上索引,有没有全表扫描等. expain出来的信息有12列,分别是,id,select_type,table, ...

  6. mysql explain 索引_MySql中Explain详解与索引最佳实践

    使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的.分析你的查询语句或是结构的性能瓶颈 下面是使用 explain 的例子: 在 select 语句之 ...

  7. MySQL中EXPLAIN详解

    EXPLAIN作为MySQL的性能分析神器,读懂其结果是很有必要的,然而我在各种搜索引擎上竟然找不到特别完整的解读.都是只有重点,没有细节(例如type的取值不全.Extra缺乏完整的介绍等). my ...

  8. explain mysql ref_MySQL explain详解

    Explain简介 本文主要讲述如何通过 explain 命令获取 select 语句的执行计划,通过 explain 我们可以知道以下信息:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索 ...

  9. Mysql之explain详解

    explain字段说明 在需要执行的sql语句前面加上 explain 可以模拟优化器对语句的执行过程. 示例说明: explain select * from sys_user; explain会返 ...

最新文章

  1. sql server T-SQL 基础
  2. MFC中绘制高亮的图标 VC图标填充半透明色
  3. 交叉工具链的搭建方法(测试成功)
  4. DevOps vs. Agile:它们有什么共同点?
  5. 电脑公司 Ghost XP SP3 国庆特别版 v2011.10
  6. mac 安装和使用MongoDB
  7. wow修改人物模型_玻璃钢气球狗模型景观雕-东莞气球树脂雕塑
  8. 解决pytorch RuntimeError: expected scalar type XXXX but found XXXX
  9. php 简易验证码(GD库)
  10. 第四百零四天 how can I 坚持
  11. 阿斯克码表java_一分钟了解阿斯克码
  12. Servlet的原理是什么?
  13. IDL(ENVI/IDL) 简(jian)明(lou)教程:一、IDL基础
  14. 浅谈AWD攻防赛的生存攻略
  15. 实战day01(二)----电商行业的背景介绍
  16. 循环神经网络RNN了解
  17. oracle bpm 二次开发,Oracle BPM Suite产品详细说明
  18. 这个季节,想到了什么
  19. Unity 3D 入门基础
  20. 文旅部:对不合理低价游、强迫消费等保持高压态势

热门文章

  1. 分层目标规划matlab,多目标规划问题Matlab示例_fgoalattain.doc
  2. 大数据Hadoop复习笔记
  3. 大话手游时间服务器哪个最新,大话手游时间服和免费服优缺点分析!选择最适合你的...
  4. atiken插值c++_c++插值代码
  5. PyCharm中导入数据分析库
  6. [Hive] Hive表压缩
  7. 使用路由器配置DHCP
  8. J2EE (十) Java中多种方式实现单例模式
  9. 学习linux—— 磁盘相关指令
  10. VSFTP服务的日常应用及疑难问题解析