explain select * from 表名 where 列名=value
explain的信息会出现如下10列,下面是各列的具体说明:
id:选择标识符
select_type:表示查询的类型
table:输出结果集的表名
type:表示表的连接类型
possible_keys:表示查询时,可能使用的索引
key:表示实际使用的索引
key_len:索引字段的长度
ref:列与索引的比较
rows:扫描出的行数
extra:执行情况的描述和说明
一、select_type:
select_type的类型有:SIMPLE、PRIMARY、UNION、DEPENDENT UNION、UNION RESULT、 SUBQUERY、DEPENDENT SUBQUERY、DERIVED、UNCACHEABLE SUBQUERY
(1) SIMPLE(简单SELECT,不使用UNION或子查询等)
二、type
常用的类型有:ALL、index、range、 ref、eq_ref、const、system、NULL(从左到右,性能从差到好)
ALL:Full Table Scan, MySQL将遍历全表以找到匹配的行
三、extra:
该列包含mysql查询下的以下信息:
Using where:不用读取表中所有信息,仅通过索引就可以获取表中数据,这发生在对表的全部请求列都是同一索引的部分的时候,表示mysql服务器在存储引擎检索行后再进行过滤。
Using temporary:表示Mysql需要使用临时表来储存结果集,常见于排序和分组查询。常见group by ,order by 。但是这个所谓的内部临时表和我们手动用CREATE TEMPORARY TABLE创建的用户临时表并不一样,在事务回滚时并不需要把执行select语句的内部临时表也回滚。
Using filesort:当查询中包含order by操作,而且无法利用索引完成的排序操作称之为“文件排序”