type 解释
system 该表只有一行(=系统表),是const的一个特例。
const 该表最多有一个匹配行,从查询时开始时读取。该列可视为常量。利用主键查询,通常是const。
举个栗子:select * from student where id =1;
eq ref 对于上一个表中的每个行组合,从此表中读取一行。
当连接使用索引的所有部分,并且索引是主键或唯一的非空索引时,将使用它。
ref 对于上一个表中的每个行组合,将从此表中读取具有匹配索引值的所有行。
如果联接只使用键的最左边前缀,或者键不是主键或唯一索引(换句话说,如果联接无法基于键值选择一行),则使用ref。
如果使用的键只匹配几行,那么这是一种很好的连接类型。
fulltext 连接使用全文索引执行。
ref or null 类似于ref,MySQL会对包含值的行进行额外的搜索。最常用于解析子查询。is null也会用ref or null处理。
举个栗子:select * from student where address is null;
index merge 使用索引合并优化。输出行中的列包含所用索引的列表,并包含所用索引的最长关键部分的列表。
unique subquery in类型的子查询,且子查询查的是唯一索引,用unique subquery代替er ref。
举个栗子:select * from student where class_id in (select id from class where grade=1);
index subquery 类似于unique subquery,子查询查的是非唯一索引。
range 仅检查给定范围内的行,并使用索引选择行。当使用任何 =、<>、>、>=、<、<=、IS NULL、<=>、BETWEEN、LIKE 或 IN() 运算符将键列与常量进行比较时,将使用range
index 扫描索引树。有两种情况:
1.索引是查询的覆盖索引,并满足表中所需的所有数据;
2.从索引中读取的数据执行全表扫描,按索引顺序查找数据行。
all 全表扫描。这是最糟糕的情况(在回表的情况下,优化器)。