MySQL In Action

2017/05/29

EXPLAIN

EXPLAIN访问类型,返回SQL分析的结果,对这些结果信息进行分析。

type 访问类型

  • all 全表扫描,速度最慢,扫描行数最多
  • index 基于索引全表扫描,按照索引顺序执行全表扫描,需要根据索引然后回表取数据(二次查询),执行效率与all差不多
  • range 范围扫描,有范围的索引扫描,也是基于索引,性能优于index。常见between、and、in、or语句都是范围扫描。
  • ref 索引扫描,有ref和ref_eq两种类型。

    ref 基于索引扫描,但是索引不是主键或则唯一索引,索引值存在重复。所以在目标值附近要进行小范围扫描。性能优于全表扫描。 ref_eq 基于唯一/主键索引扫描,索引值唯一,性能优。

  • const 常量扫描,如果是基于唯一/主键索引扫描,MySQL优化器会将其转为一个常量进行查询优化,性能最优。

select_type 查询类型

  • simple 简单SQL查询语句,不包含子查询或UNION

rows 预计扫描行数

filtered

role_id没加索引时是10,加索引变为100?

Extra 查询详细信息

  • Using where
  • Using join buffer

索引

索引如何存储

介绍常见的索引模型

  • hash O(1)适用等值查询
  • 数组 O(1)修改代价高
  • B树 O(logN)

索引数据是什么时候添加进来的

索引如何执行

表是如何存放的

Post Directory