最新消息: 新版网站上线了!!!

mysql explain 摘要

mysql> explain select * from siteinfo;
+----+-------------+----------+------+---------------+------+---------+------+--------+-------+
| id | select_type | table    | type | possible_keys | key  | key_len | ref  | rows   | Extra |
+----+-------------+----------+------+---------------+------+---------+------+--------+-------+
|  1 | SIMPLE      | siteinfo | ALL  | NULL          | NULL | NULL    | NULL | 902310 |       | 
+----+-------------+----------+------+---------------+------+---------+------+--------+-------+
只说type
system:
        表仅有一行,这是const连接类型的一个特例
const:
        const用于常数值比较primary key时,单查询的表仅有一行时,使用system
eq_ref:
        除const类型外最好的可能实现的连接类型 它用在一个索引的所有部分被连接使用并且索引是unique或primary key
       对于每一个索引键,表中只用一条记录与之匹配
ref:
       连接不能基于关键字选择单个行,可能查找到多个符合条件的行。叫做ref是因为索引要跟某个参考值相比较。
       这个参考值或者是一个常数,或者是来自一个表里的多表查询的结果值。
ref_or_null:
        如同ref,但是MySQL必须在初次查找的结果里找出null条目,然后进行二次查找。
index_merge:
        说明索引合并优化被使用
unique_subquery: 
        在某些IN查询中使用此种类型,而不是常规的ref: 
        value IN (SELECT primary_key FROM single_table WHERE some_expr) 
 
index_subquery:
        在某些IN查询中使用此种类型,与unique_subquery类似,但是查询的是非唯一性索引: 
        value IN (SELECT key_column FROM single_table WHERE some_expr) 
range:
        只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引。当使用=、<>、>、>=、<、<=、
        IS NULL、<=>、BETWEEN或者IN操作符,用常量比较关键字列时,可以使用range。
index:
            全表扫描,只是扫描表的时候按照索引次序进行而不是行。主要优点就是避免了排序,但是开销仍然非常大。
all:
     全表扫描
 
possible key : 可能使用到的索引
 
key : 实际使用到的索引
       MySQL实际从possible_key选择使用的索引。如果为NULL,则没有使用索引。
       很少的情况下,MYSQL会选择优化不足的索引。
       这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引
       或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
 
key_len: 索引长度,在不损失精确性的情况下,长度越短越好
 
ref: 说明索引的哪一列被使用了,
 
rows: 检索的行数
 
extra项:
     userfilesort
             表示MySQL会对结果使用一个外部索引排序,而不是从表里按索引次序读到相关内容。
             可能在内存或者磁盘上进行排序。MySQL中无法利用索引完成的排序操作称为“文件排序”。
      using temporary
            表示MySQL在对查询结果排序时使用临时表。常见于排序order by和分组查询group by。
.....

转载请注明:谷谷点程序 » mysql explain 摘要