eq_ref 跨表join时,对于驱动表的每一行记录,被动表最多只会读取一行记录。跟单表查询不一样(system,const最快),在跨表查询中,eq_ref是最好的 ref 等值查询,但是可能匹配大于1行记录。比如普通的非唯一索引,或者联合主键和联合唯一索引的左前缀匹配(非全匹配) ref_or_null 与ref类似,但是条件中多了一个IS NULL判
3、eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于唯一索引或者主键扫描 4、ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,可能会找多个符合条件的行,属于查找和扫描的混合体 5、range:只检索给定范围的行,使用一个索引来选...
当连接使用索引的所有部分且索引是 索引PRIMARY KEY或UNIQUE NOT NULL索引时使用它。 SELECT * FROM ref_table,other_table WHERE ref_table.key_column=other_table.column; SELECT * FROM ref_table,other_table WHERE ref_table.key_column_part1=other_table.column AND ref_table.key_column_part2=1; ref...
不同类型性能从强到差:system > const > eq_ref > ref > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all。建议大家在平时书写sql时,多用explain进行分析,尝试去优化代码,只有不断的实践,才能让自己的sql能力越来越强。#2023我们一起跨年# 我是@程序员拾山,...
type: ALL possible_keys: NULL key: NULL key_len: NULL ref: NULL rows: 22748 filtered: 11.11 Extra: Using where 查询根据用户id可以被10整除的用户数据。因为在=前的索引列上进行了表达式运算,不能命中索引,会全表扫描。 mysql> EXPLAIN SELECT * FROM `user` WHERE id%10=0 \G ...
MySQL就把这种类型的查询定义为了ref。 在上面我们说到,由于唯一索引可能存在多个null,所以用不了const。 那对于 select * from t2 where key2 is null 来说,不管是唯一索引还是普通索引,其最多用到ref这种类型。 5、ref_or_null 应用场景:命中索引时,查询条件除了等值查询,还包含null值查询。 比如:select ...
EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的 type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL type显示的是访问类型,是较为重要的一个指标,结果值从好到坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > in...
2.4、type 连接的类型 system 系统表,只有一行数据 const数据表只有一个匹配行(根据一个条件只能查询到一个sql) eq_ref使用唯一索引或者这个索引是根据主键来建立 ref查询了非唯一索引 ref_or_null表示查询非唯一索引,并且处理了索引列为null的情况 index_merge使用了多个索引作为查询条件(多个索引同时查询,然后做合并...
1.7 type type是查询的访问类型,是较为重要的一个指标,性能从最好到最坏依次是 system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL。 一般来说,得保证查询至少到达range级别,最好能达到ref。
性能: null > system/const > eq_ref > ref > ref_or_null >index_merge > range > index > all 4.1 type=NULL 在优化过程中就已得到结果,不用再访问表或索引。 EXPLAIN SELECT max(id) FROM person; 4.2 type=const/system 常量 在整个查询过程中这个表最多只会有一条匹配的行,比如主键 id=1 就...