3、eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配。常见于唯一索引或者主键扫描 4、ref:非唯一性索引扫描,返回匹配某个单独值的所有行,本质上也是一种索引访问,它返回所有匹配某个单独值的行,可能会找多个符合条件的行,属于查找和扫描的混合体 5、range:只检索给定范围的行,使用一个索引来选择行。key列显示使用了哪个索引,
type = eq_ref,相对于ref来说就是使用的是唯一索引,对于每个索引键值,只有唯一的一条匹配记录(在联表查询中使用primary key或者unique key作为关联条件) (在film和film_text中film_id都是主键,即都是唯一索引) mysql> explain select * from film a ,film_text b where a.film_id = b.film_id\G *** ...
优化建议 尽量让查询达到 const、eq_ref 或ref 级别 避免index 和ALL 类型的出现 对于range 查询,确保范围尽可能小 使用覆盖索引(查询列都在索引中)可以将 ALL 提升为 index 通过分析 EXPLAIN 的type 列,可以快速判断查询的性能瓶颈并针对性优化。 编辑于 2025-05-19 14:58・广东 MySQL ...
不同类型性能从强到差:system > const > eq_ref > ref > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all。建议大家在平时书写sql时,多用explain进行分析,尝试去优化代码,只有不断的实践,才能让自己的sql能力越来越强。#2023我们一起跨年# 我是@程序员拾山,...
1.explain说明 1.1.type说明 从最好到最坏依次如下表; 加粗的是比较重要的; SQL 性能优化的目标:至少要达到 range 级别,要求是 ref 级别,最好是 consts级别。(阿里巴巴开发手册要求) 1.1.1.总结sql -- 结果值从最好到最坏依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_...
EXPLAIN SELECT * FROM person where id =2; 所以说可以理解为const是最优化的。 4.3 type=eq_ref 使用有唯一性 索引查找(主键或唯一性索引) 对于eq_ref的解释,mysql手册是这样说的:”对于每个来自于前面的表的行组合,从该表中读取一行。这可能是最好的联接类型,除了const类型。它用在一个索引的所有部分被联...
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 ...
type 连接类型,有如下几种取值,性能从好到坏排序 如下:1 system:该表只有一行(相当于系统表),system是const类型的特例 2 const:针对主键或唯一索引的等值查询扫描, 最多只返回一行数据. const 查询速度非常快, 因为它仅仅读取一次即可 3 eq_ref:当使用了索引的全部组成部分,并且索引是PRIMARY KEY或UNIQUE...
eq_ref 最多只会有一条匹配结果,一般是通过主键或唯一键索引来访问 ref 对于来自前面表的每一行,在此表的索引中可以匹配到多行。若联接只用到索引的最左前缀或索引不是主键或唯一索引时,使用ref类型(也就是说,此联接能够匹配多行记录)。 ref可用于使用’=‘或’<=>'操作符作比较的索引列。
type显示的是访问类型,是较为重要的一个指标,性能从最好到最坏依次是 system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL。一般来说,得保证查询至少达到range级别,最好能达到ref。2.6 possible_keys 查询时可能使用...