数字越大越先执行,一样大则从上往下执行,如果为NULL则表示是结果集,不需要用来查询。
表名,如果是用了别名,则显示别名
依次从好到差:system>const>eq_ref>ref>fulltext>ref_or_null>unique_subquery>index_subquery>range>index_merge>index>ALL,除了ALL之外,其他的type都可以使用到索引,除了index_merge之外,其他的type只可以用到一个索引。
type要努力优化到range级别,all要尽量少的出现
关于这些type的解释:
system:表中只有一行数据或者是空表。const:使用唯一索引或者主键,返回记录一定是1行记录的等值where条件时,通常type是const。eq_ref:出现在要连接过个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为not null,唯一索引和主键是多列时,只有所有的列都用作比较时才会出现eq_ref。ref:不像eq_ref那样要求连接顺序,也没有主键和唯一索引的要求,只要使用相等条件检索时就可能出现,常见与辅助索引的等值查找。fulltext:全文索引检索,要注意,全文索引的优先级很高,若全文索引和普通索引同时存在时,mysql不管代价,优先选择使用全文索引。ref_or_null:与ref方法类似,只是增加了null值的比较。实际用的不多。unique_subquery:用于where中的in形式子查询,子查询返回不重复值唯一值。index_subquery:用于in形式子查询使用到了辅助索引或者in常数列表,子查询可能返回重复值,可以使用索引将子查询去重。range:索引范围扫描,常见于使用>,<,is null,between ,in ,like等运算符的查询中。index_merge:表示查询使用了两个以上的索引,最后取交集或者并集,常见and ,or的条件使用了不同的索引。index:索引全表扫描,把索引从头到尾扫一遍,常见于使用索引列就可以处理不需要读取数据文件的查询、可以使用索引排序或者分组的查询。ALL:这个就是全表扫描数据文件,然后再在server层进行过滤返回符合要求的记录。查询可能使用到的索引。
查询真正使用到的索引。
用于处理查询的索引长度。
常数等值查询(就是直接"AAA=BBB"的查询)显示const,连接查询则显示表的关联字段。
执行计划中估算的扫描行数,不是精确值。理论上说是越少越好,越少说明索引用越精确.需要扫描的行数越少.
表示存储引擎返回的数据在server层过滤后,剩下多少满足查询的记录数量的比例。