mysql5.7中type的类型达到了14种之多,这里只记录和理解最重要且经常遇见的六种类型,它们分别是all,index,range,ref,eq_ref,const。从左到右,它们的效率依次是增强的。撇开sql的具体应用环境以及其他因素,你应当尽量优化你的sql语句,使它的type尽量靠右,但实际运用中还是要综合考虑各个方面的。 接下来,为了演示和...
NULL > system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL system > const > eq_ref > ref > range > index > ALL 一般至少要达到range级别,最好达到ref 。 const 唯一索引,非关联查询 eq_ref,ref eq_re...
mysql> explain select * from a where id=1\G ... type: ALL 目前表中只有一条 id=1 的记录,但 type 已为 ALL ,因为只有唯一性索引才能保证表中最多只有一条记录,只有这样 type 才有可能为 const 。 为id 加普通索引后, type 变为 ref ,改为加唯一或主键索引后, type 便变为 const 了。 二、...
在EXPLAIN结果中,type字段有多个可能的取值,常见的有const、eq_ref、ref、range、index、all等。其中,index表示MySQL对于查询使用了索引。 当type为index时,说明MySQL使用了索引来执行查询,这通常意味着查询速度会比较快。但需要注意的是,并不是所有的index都代表查询性能一定会很好,还需要根据具体情况来进行分析查询性能。
不同类型性能从强到差:system > const > eq_ref > ref > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all。建议大家在平时书写sql时,多用explain进行分析,尝试去优化代码,只有不断的实践,才能让自己的sql能力越来越强。#2023我们一起跨年# 我是@程序员拾山,...
explain执行计划中包含的信息如下: id: 查询序列号 select_type: 查询类型 table: 表名或者别名 partitions: 匹配的分区 type: 访问类型 possible_keys: 可能用到的索引 key: 实际用到的索引 key_len: 索引长度 ref: 与索引比较的列 rows: 估算的行数 ...
就type进行详细的介绍: System,const,eq_ref,ref,range,index,all all :即全表扫描 index :按索引次序扫描,先读索引,再读实际的行,结果还是全表扫描,主要优点是避免了排序。因为索引是排好的。 range:以范围的形式扫描。 explain select * from a where a_id > 1\G ...
explain select a.status from sms a left join whitelist b on b.id = a.id index&eq_ref.png //相当于执行以下循环List<Map<String,Object>>resultA=select a.status from sms afor(Map<String,Object>map:resultA){List<Map<String,Object>>resultB=select*from whiteList b where b.id=map.get("...
type=index,索引全扫描,MySQL遍历整个索引来查询匹配的行:select username from user;type=ref,使用非唯一索引扫描或唯一索引的前缀扫描,返回匹配某个单独值的记录行,例如:select * from user where username = '张三';个人理解:看你有没有加where条件吧,加了where就要匹配记录行。另外本人也测试...
EXPLAIN 结果中的type)字段 Tips:常见的扫描方式 system:系统表,少量数据,往往不需要进行磁盘IO const:常量连接 eq_ref:主键索引(primary key)或者非空唯一索引(unique not null)等值扫描 ref:非主键非唯一索引等值扫描 range:范围扫描 index:索引树扫描