书接上回:MySQL执行计划(一)
执行计划中的列
type
type列指代访问类型,是MySQL决定如何查找表中的行。
是SQL查询优化中一个很重要的指标,拥有很多值,依次从最差到最优:
ALL
全表扫描,性能最差,在写SQL时尽量避免此种情况的出现,也就是避免是
SELECT *
index
全索引查询,和全表查询的ALL类似,但是扫描表时按索引次序进行(遍历索引树),而不是按行扫描
index与ALL虽然都是读全表,但index是从索引中读取,而ALL是从硬盘读取。
显然,index性能上明显优于ALL,所有,合理的添加索引将有助于提升性能。
举例如下:
range
只查询给定范围的行,使用一个索引来选择行。
- key列显示使用了那个索引;
- 一般就是在where语句中出现了bettween、<、>、in等的查询;
- 这种索引列上的范围扫描比全索引扫描index要好。
ref
非唯一性索引扫描,返回匹配某个单独值的所有行。本质是也是一种索引访问,它返回所有匹配某个单独值的行,然而它可能会找到多个符合条件的行,所以它属于查找和扫描的混合体。
此类型只有当使用非唯一索引或者唯一索引的非唯一性前缀时,才会发生。
eq_ref
- 唯一索引扫描
- 主要用于主键或唯一索引扫描。
const
- 通过索引一次就能找到,const用于比较primary key 或者unique索引。
- 因为只需匹配一行数据,所有很快。
- 将主键置于where列表中,mysql就能将该查询转换为一个const。
system
- 表只有一行记录,这是const类型的特例,比较少见。
下一篇
MySQL执行计划(三)