Mysql的sql语句执行效率检查 --Explain

Explain

Explain 语法:Explain Select * from about;

输出

    +----+-------------+-------+-------+-------------------+-----
    ----+---------+-------+------+-------+
    | id | select_type | table | type | possible_keys | key | 
    key_len | ref | rows | Extra |
    +----+-------------+-------+-------+-------------------+-----
    ----+---------+-------+------+-------+

##上面每个属性的意思,下面给大家讲解一下

一般来说,得保证查询至少达到range级别,最好能达到ref,否则就可能会出现性能问题。
+ possible_keys:列指出Mysql能使用那种索引在该表中找到行
+ key: 现设mysql实际决定使用的键(索引)。如果没有索引,键是null
+ key_len:现设mysql决定使用的键长度。如果键是NULL,则成都那么NULL。使用索引的长度。在不损失精确性的情况下,长度越短越好
+ ref:显示使用哪些列或常数与key一起从表中选择行
+ rows:显示Mysql认为它执行查询时必须检查的行数
+ Extra:包含Mysql解决查询的详细信息,也是关键参考项之一

 Distinct:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
 Not exists:优化了left join,一旦找到了匹配的left join标准的行,就不再搜索了
 Range checked for each

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

1.当type显示为‘index’时,并且Extra显示为“Using index”,表明使用了覆盖索引