或者 unique key索引, type 就是 eq_ref。ref_or_nullref_or_null:这种连接类型类似于 ref,区别在于 MySQL会额外搜索包含NULL值的行。 index_mergeindex_merge:使用了索引合并优化方法,查询使用了两个以上的索引。 unique_subqueryunique_subquery:替换下面的 IN子查询,子查询返回不重复的集合。 index_subqueryindex_subquery:区别于unique_subquery,用于非唯一索引,可以返回重复值。 rangerange:使用索引选择行,仅检索给定范围内的行。简单点说就是针对一个有索引的字段,给定范围检索数据。在where语句中使用 bettween...and、<、>、<=、in 等条件查询 type 都是 range。 indexindex:Index 与ALL 其实都是读全表,区别在于index是遍历索引树读取,而ALL是从硬盘中读取。 ALL就不用多说了,全表扫描。 possible_keys 列:显示查询可能使用哪些索引来查找,使用索引优化sql的时候比较重要。 key 列:这一列显示 mysql 实际采用哪个索引来优化对该表的访问,判断索引是否失效的时候常用。 key_len 列:显示了 MySQL使用 ref 列:ref 列展示的就是与索引列作等值匹配的值,常见的有:const(常量),func,NULL,字段名。 rows 列:这也是一个重要的字段,MySQL查询优化器根据统计信息,估算SQL要查到结果集需要扫描读取的数据行数,这个值非常直观显示SQL的效率好坏,原则上rows越少越好。 Extra 列:显示不适合在其它列的额外信息,虽然叫额外,但是也有一些重要的信息:
- Using index:表示MySQL将使用覆盖索引,以避免回表
- Using where:表示会在存储引擎检索之后再进行过滤