MySQL高级中explain之type的介绍
type类型
从最好到最差依次是:
system > const > eq_ref > ref > range > index > all
对以上分类的详细介绍表格如下:
type类型 | 详细介绍 |
system | 表只有一行记录(等于系统表),这是const类型的特例,平时不不会出现,这个可以忽略不计 |
const | 表示通过索引一次就找到了,const用于比较primary key或者 unique索引。因为只匹配一行数据,所以很快,如将主键置于where列表中,MySQL就能将该查询转为一个常量 |
eq_ref | 唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常见于主键或唯一索引扫描 |
ref | 非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,然而它可能会找到多个符合条件的行,所以它应该属于查找和扫描的混合体 |
range | 只检索给定范围的行,使用一个索引来选择行,key列显示使用了哪个索引,一般就是在你的where语句种出现了between、<、>、in等的查询,这种范围扫描索引比全表扫描要好,因为只需要开始与索引的某一点,而结束与另一点,不用扫描全部索引 |
index | Full Index Scan,index与ALL区别为index类型只遍历索引树,这通常比ALL快,因为索引文件通常比数据文件小,(也就是说虽然all和index都是读全表,但index是从索引中读取的,而all是从硬盘中读的,后者与磁盘I/0的交互次数较多) |
all | Full Table Scan, 将遍历全表以找到匹配的行 |
备注:一般来说,得保证查询至少达到range级别,最好能达到ref