Chinaunix首页 | 论坛 | 博客
  • 博客访问: 350868
  • 博文数量: 86
  • 博客积分: 1460
  • 博客等级: 上尉
  • 技术积分: 848
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-12 14:07
文章分类

全部博文(86)

文章存档

2017年(36)

2016年(17)

2015年(1)

2013年(12)

2012年(2)

2011年(1)

2010年(1)

2009年(16)

我的朋友

分类: Mysql/postgreSQL

2017-05-21 10:24:16

1. 在这里对explain的各个字段进行详细的分析,来帮助大家分析自己所写的sql是否最佳的使用了索引。

首先是select_type:将select查询分为简单(simple)和复杂两种类型

复杂类型又分为子查询(subquery)和from列表中包含子查询(drived)
      常见类型 simple,primary,union,subquery,drived

simple:

drived:

就type进行详细的介绍:

System,const,eq_ref,ref,range,index,all(性能排序system>const>eq_ref>ref>range>index>all)

all :即全表扫描  性能最差 优先优化

index :按索引次序扫描,先读索引,再读实际的行,结果还是全表扫描,主要优点是避免了排序。因为索引是排好的。两种方式:index-only 是覆盖index,仅扫描索引,Etrax 会有using index 提示,index 是要先扫索引再读数据,extra 不会有提示

range:以范围的形式扫描。

ref:非唯一索引访问(只有普通索引)

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

使用到临时表

Using filesort

若查询所需的排序与使用的索引的排序一致,因为索引是已排序的,因此按索引的顺序读取结果返回,否则,在取得结果后,还需要按查询所需的顺序对结果进行排序,这时就会出现 Using filesort 。

Using index condition
      使用Index Condition Pushdown 优化
       Using MRR 、
      使用MRR 优化
      Impossible WHERE

      where 语句一直为假

阅读(1333) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~