explain
id
id相同,执行顺序由上至下
id不同, 如果是子查询, id的序列会递增.id值越大优先级越高, 越先被执行
id如果相同, 可以认为是一组, 从上往下顺序执行,在所有的组中, id值越大,优先级越高,越先执行
衍生表, Derived
select_type
simple
简单表查询, 不包含子查询或者 union
primary
如果查询包含复杂的子部分, 最外层查询则被标记为 primary
subquery
Select 或者 where 列表中包含子查询
derived
在from 列表中包含的 子查询呗标记为derived(衍生), Mysql 会递归执行这些子查询, 把结果放在临时表中.
union
若第二个select 出现在 union之后, 则被标记为union , 若union 包含在from子句的子查询中, 外层的 Select 将被标记为 Derived
union result
从Union 表获取结果的 Select
table
当前执行的表
derived2 这种写法, 是表示当前的表是后面某个子查询的结果的临时表
type
查询使用了那种类型, 执行效率 system > const > eq_ref > ref > range > index > all
all
full table scan 将遍历全表以找到匹配的行
index
full index scan , 遍历索引树,
range
只检索给定范围的行, 使用应该索引来选择行, 一般就是 between , < > in 等的查询
ref
非唯一性索引扫描, 返回匹配某个单独值所有的行, 本质也是一种索引服务, 它房号所有单独值的行, 然而它可能会找到多个符合条件的行, 所有他应该属于查找和扫描的混合体
eq_ref
唯一性索引扫描, 对于每一个索引建, 表只有一条记录与之匹配, 主键或者唯一索引扫描
const
通过一次索引就找到了, 通过 primary key 或者 unique 索引, 只匹配一行数据, 所以很快,
system
表只有一行记录,等于系统表, 是 const 类型的特例
possible_keys
显示这张表中可能用到的索引, 一个或多个
key
实际使用的索引, 如果为NULL 则没有使用索引
key_len
索引数据类型长度,在不损失精度的情况下, 长度越端越好. 包含一个长度用于 标识 空或者非空
ref
显示索引的哪一列被使用了, 如果可能的话,最好是一个常数. 哪些列或者常量被用于查找索引上的值
rows
根据表统计信息及索引选用情况, 大致估算找到的记录需要读取的行数, 也就是说用的越少越好
extra
using filesort
无法利用索引排序, 对数据使用应该外部的索引排序
using temporary
使用临时表排序
using index
使用了覆盖索引,避免访问表的数据
using where
索引被用来执行索引建值查找
using join buffer
使用连接缓存,比如在查询的时候, 多表join
impossible where
where 条件不成立, 不查询任何数据
select tables optimized away
在没有使用 group by 子句的情况下, 基于 Min Max 或者对于 MyIsam 存储引擎优化 count(*) 操做, 不必到执行阶段再计算, 在执行计划生成阶段就完成优化
子查询
子查询展开
Derived_merge
mysql 临时表