explain 说明
explain select * from xxx
字段 | 说明 | 补充 |
---|---|---|
id | 查询序号,需要越高执行越优先 | |
select_type | 查询类型 | SIMPLE : 简单查询 PRIMARY: 查询中包含子查询,外部标记为Primary DERIVED: 在from 列表中包含的子查询标记 DERIVED SUBQUERY: select 或 where 中包含子查询。=号 DEPENDENT SUBQUERY:依赖查询 select 或 where 列表中包含了子查询。这里是in() UNCACHEABLE SUBQUREY: 不可用缓存查询 UNION :第二个select 出现 union 则被标记为union 。union包含在from子句的子查询中,外层select被标记为derived UNION RESULT: 从union表获取结果的select |
Table | 这一行数据来自那张表 | |
partitions | 分区表命中情况 | |
Type | 链接类型 优化索引主要看的参数 | system: 表仅一行 const: 索引一次就找到 eq_ref : 唯一性索引 表中只有一条记录匹配Ref: 非唯一性索引 匹配到一个或多个符合条件的结果。ref_or_null: 对于某个字段要么为空,要没为某个值 index_merge: 查询过程中需要多个索引组合使用,通常出现or的关键字中 unique_subquery: 子查询中的唯一索引 index_subquery: 利用索引来关联子查询,不再全表扫描 range: 只检查给定范围,使用一个索引来选择行 ,where中出现 between 、in等 index: sql 使用了索引,但是没有通过索引进行过滤 索引覆盖ALL: 全表扫描 |
possible_keys | 可能应用到的索引 | |
key | 实际使用的索引 null代表没使用索引 | |
key_len | where条件后面筛选条件命中索引长度 | |
Ref | 显示索引的那一列被使用 | |
Rows | 查询的时候检查了多少行 | 行数越少性能越高 |
Filtered | 返回数据在server 过滤后,剩下多少满足条件的数据比例 | |
Extra | 包含不适合在其他列中显示但十分重要的信息 | Using filesort : mysql会对数据使用一个外部索引排序,不是按照表内的索引顺序进行读取。mysql中的索引无法完成排序操作 Using temporary: 使用了临时表保存中间结果,order by、group by using join buffer : where句子是 不能获取任何 远组 using index : select 操作中发生了索引覆盖,避免了访问数据行 效率比较理想 如果同时出现了 using where 表明索引被用来执行索引值的查找。如果没有出现 using where 表明索引只是用来读取数据而非利用索引执行查找。利用索引进行排序或分组using where : 使用了where 过滤 select tables optimized away: 在没有 group by 字句 基于索引优化了 min/max 操作或conunt(*) 不需要等待执行阶段在进行计算。 |