select Type:
SIMPLE : 查询中不包含子查询或者UNION.
PRIMARY: 查询中包含任何复杂的子部分,最外层查询被标记为PRIMARY.
SUBQUERY: 在SELECT或者WHERE列表中包含了子查询,该子查询被标记为SUBQUERY.
DERIVED: 在FROM列表中包含的子查询被标记为DERIVED.
UNION: 若第二个SELECT出现在UNION之后,则被标记为UNION;若UNION包含在FROM子句的子查询中,则被标记为DERIVED.
UNION RESULT 从UNION表获取结果的SELECT被标记为UNION RESULT.
Extra:
using where:表示需要回文才能找到内容,优化方案是尽量走索引。
using index:表示直接走索引就查出了数据。
type:
表示MySQL执行查询时是如何获取所需行的,又称”访问类型”
ALL: Full Table Scan,MySQL扫描全表以找到匹配的行.
index: Full Index Scan,index与ALL的区别在于index只遍历索引树
range: 索引范围扫描,对索引的扫描开始于某一点,返回匹配值域的行.
ref: 非唯一性索引扫描,返回匹配某个值的所有.
eq_ref: 唯一性索引扫描,对于某个索引键,表中只有一条记录与之匹配,常见于主键或者唯一索引查询.
const,system: 当MySQL优化部分查询,并转换为一个常量时,使用这些类型访问.如将主键置与where列表中,MySQL就能将该查询替换为一个常量.需要注意的是system是const的特殊类型,当查询的表只有一行的情况下使用system.
NULL: MySQL在优化过程中分解语句,执行时不用访问表或者索引.
优化器会在索引存的情况下,通过符合 RANGE 范围的条数和总数的比例来选择是使用索引还是进行全表遍历