一、执行计划
explain select * from staff where id = 1;
- id:序列号
- select_type:查询类型
SIMPLE:表示查询语句不包含子查询和union。
PRIMARY:表示查询是最外层查询。
UNION:表示此查询是UNION的第二个或者后续查询。
DEPENDENT UNION:UNION中的第二个或后续的查询语句,使用的外面的查询结果。
UNION RESULT:UNION的结果。
SUBQUERY:select子查询语句。
DEPENDENT SUBQUERY:select查询语句依赖外层的结果。
- table:使用到了哪张表。
- type:表示存储引擎查询数据时所采用的方式,通过看这个可以看是全表扫描还是基于索引部分扫描。
ALL:代表全表扫描,性能最差。
index:表示基于索引的全表扫描,先扫描索引,再扫描全表数据。
range:表示使用索引范围查询,使用>、>=、<、<=、in等等。
ref:表示使用非唯一索引进行单值查询。
eq_ref:一般情况下出现在多表join查询,表示前面表的每一个记录,都只能匹配后面表的一行结果。
const:表示使用主键或唯一索引做等值查询,常量查询。
NULL:表示不用访问表,速度最快。
- possible_keys:查询时可以会使用到的索引,不一定会真使用,显示索引名称。
- key:查询时真正用到的索引,显示索引名称。
- rows:MySQL查询优化器会根据统计信息,估算SQL要查询到结果需要扫描多少行记录。原则上rows是
越少效率越高,可以直观的了解到 SQL 效率高低。
-
key_len: 表示查询使用了索引的字节数量。可以判断是否全部使用了组合索引。
-
Extra:额外信息。
Using where:表示查询需要通过索引回表查询数据。
Using index:表示查询需要通过索引,索引就可以满足所需数据。
Using fifilesort:表示查询出来的结果需要额外排序,数据量小在内存,大的话在磁盘,因此有Using fifilesort 建议优化。
Using temprorary:查询使用到了临时表,一般出现于去重、分组等操作。