mysql explain详解

用explain分析后的数据

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 范围的条数和总数的比例来选择是使用索引还是进行全表遍历

你可能感兴趣的:(mysql explain详解)