注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

中吴南顾惟一笑

成功法则就是那19个字

 
 
 

日志

 
 

Explain的含义  

2014-11-04 17:28:16|  分类: dbms |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

mysql> EXPLAIN SELECT city.name, city.district FROM city, country WHERE city.countrycode = country.code
   AND country.code = 'IND';
    +----+-------------+---------+-------+---------------+---------+---------+-------+------+-------------+
    | id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows | Extra       |
    +----+-------------+---------+-------+---------------+---------+---------+-------+------+-------------+
    |  1 | SIMPLE      | country | const | PRIMARY       | PRIMARY | 3       | const |    1 | Using index |
    |  1 | SIMPLE      | city    | ALL   | NULL          | NULL    | NULL    | NULL | 4079 | Using where |
    +----+-------------+---------+-------+---------------+---------+---------+-------+------+-------------+

上表中各个属性的含义是是:

id
 显示待分析的SELECT语句的ID。如果语句不包含子查询或者union,则ID均为1
select_type
 显示SELECT语句的类型。SIMPLE说明是普通查询,不包含子查询和UNION。其他
 取值说明是子查询还是UNION。
table
 输出行引用的表名 
type
 显示联合查询使用了何种类型,从最好到最差的连接类型为const-->eq_reg-->ref
 -->fulltext-->ref_or_null-->index_merge-->unique_subquery-->
 index_subquery-->range-->index-->ALL,一般来说得保证查询至少达到range
 级别,当然了最好能达到ref级别。
possible_keys
 显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句
 中选择一个合适的语句
key
 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的
 索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者
 用IGNORE INDEX(indexname)来强制MYSQL忽略索引
key_len
 使用的索引的长度。在不损失精确性的情况下,长度越短越好。对于多重主键,该值可以看出
 实际使用了哪一部分
ref
 显示索引的哪一列被使用了,如果可能的话,是一个常数
rows
 MYSQL认为必须检查的用来返回请求数据的行数
Extra
 关于MYSQL如何解析查询的额外信息。坏的例子包括Using temporary和Using filesort,
 意思MYSQL根本不能使用索引,结果是检索会很慢。如果是Using index则说明结果很理
 想,只需采用索引树的信息即可得到结果。  


==============================================================================================

Extra 列返回的描述的意义
  Distinct
 一旦MYSQL找到了与行相联合匹配的行,就不再搜索了 
  Not exists
 MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了 
  Range checked for each 

  Record(index map:#)
 没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,
 并用它来从表中返回行。这是使用索引的最慢的连接之一
  Using filesort
 看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对
 返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行 
  Using index
 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的
 全部的请求列都是同一个索引的部分的时候 
  Using temporary
 看到这个的时候,查询需要优化了。MYSQL需要创建一个临时表来存储结果,这通常发
 生在对不同的列集进行ORDER BY上,而不是GROUP BY上 
  used where
 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的
 全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题

  评论这张
 
阅读(69)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017