8、index_subquery当有如下语句执行时: value in(select key_column from single_table where ...) 与上面的相似,表示对于in子句来说,当in子句里的子查询返回的是某一个表的二级索引列(非主键列)时,type显示为index_subquery。 9、range:在有索引的列上取一部分数据。常见于在索引列上执行between and操作。
与上面相反,如果执行计划的某一步的type是ref的话,表示这一步的关联列是非唯一索引。例如,用表jiang的主键id列关联表lock_test的num列,num列上建立了普通索引: 上面SQL执行时,表jiang是驱动表,lock_test是被驱动表,被驱动表上走的是非唯一索引,type类型为ref。 所以ref的特点是:表示这一步访问数据使用的...
type是查询的访问类型,是较为重要的一个指标,性能从最好到最坏依次是 system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery >index_subquery> range > index > ALL。 一般来说,得保证查询至少到达range级别,最好能达到ref。 (1)system 当表仅存在一行记录时(系统...
详解执行计划 type 列 通过explain 语句可以帮助我们查看查询语句的具体执行计划,那么在执行计划中的 type 列表示 MySQL 是如何查找对应的数据了,我们先来说一下执行计划中 type 列常见的值 这里主要说一下常见的几种:const、ref、range、index,性能从左到右逐渐变差 首先,const 的话表示性能是常量级的,非常快 就...
range:范围扫描,表示MySQL会根据索引上的范围条件来找到匹配的记录。 ref:唯一索引查找,表示MySQL会使用非唯一索引来查找匹配的记录。 eq_ref:唯一索引查找,表示MySQL会使用唯一索引来查找匹配的记录。 const:常量查找,表示MySQL会根据主键或唯一索引查找匹配的记录。这是最快的一种访问方法。
前面的 type 为 ref 表示通过索引查找数据,一般出现等值匹配的时候,type 会为 ref;后面这个 type 为 range 表示这是一个索引的范围扫描(因为是模糊匹配,而模糊匹配可以形成扫描区间)。 前面的 ref 为 const 表示与索引列进行等值匹配的是一个常量。
与上面的相似,表示对于in子句来说,当in子句里的子查询返回的是某一个表的二级索引列(非主键列)时,type显示为index_subquery。 9、range: 在有索引的列上取一部分数据。常见于在索引列上执行between and操作。 10、index: 索引全扫描,一般发生在覆盖索引的时候,也就是对有索引列发生一次全扫描。
一、type:连接类型 最关键的一列 效率(const>eq_ref>ref>range>index>all) 1、const:查询索引字段,并且表中最多只有一行匹配(好像只有主键查询只匹配一行才会是const,有些情况唯一索引匹配一行会是ref) 2、eq_ref 主键或者唯一索引 3、ref 非唯一索引(主键也是唯一索引) ...
type 中的各个意思 | ALL | 全表扫描 | index | 索引全扫描 | range | 索引范围扫描,常用语<,<=,>=,between等操作 | ref | 使用非唯一索引扫描或唯一索引前缀扫描,返回单条记录,常出现在关联查询中 | eq_ref | 类似ref,区别在于使用的是唯一索引,使用主键...
类似于select * from table where name=xx or name IS NULL,那么此时执行计划的type就是ref_of_null。 all all意思就是全表扫描,扫描你聚簇索引里所有的叶子节点,当然是最慢的一种了。 总结: const、ref和range,都是基于索引树的二分查找和多层跳转来查询,所以性能一般都是很高的; ...