mysql explain type 各个字段解释

system > const > eq_ref > ref > range > index > ALL

一、总览理解(先记住)

type 性能 含义
system 最优 表只有1行
const 极优 主键唯一查询
eq_ref 很好 join 唯一索引匹配
ref 普通索引等值查询
range 中等 范围扫描
index 较差 扫描整个索引
ALL 最差 全表扫描

二、逐个解释(面试标准答案)


1. system(最好)

含义:

表只有一行数据(系统表或极小表)。

复制代码

select * from config;

如果表只有一条记录。

特点:

  • 几乎瞬间完成
  • 极少见

2. const(非常好)

含义:

通过 主键 / 唯一索引 一次就找到一条记录。

复制代码

select * from user where id = 1;

id 是主键。

特点:

  • 只匹配一行
  • 最常见高效查询

3. eq_ref(join 最优)

含义:

多表关联时,使用主键或唯一索引,每次关联只返回一条记录。

复制代码

select *

from order o

join user u on o.user_id = u.id;

u.id 是主键。

特点:

  • join 性能很好
  • 一对一关联

4. ref(常见且不错)

含义:

使用普通索引做等值查询,可能匹配多行。

复制代码

select * from user where name='Tom';

name 有普通索引。

特点:

  • 常见业务查询
  • 比 const 稍差(可能多行)

5. range(范围扫描)

含义:

索引范围查询。

复制代码

select * from user where age > 18;

或:

复制代码

where id between 1 and 100

where name like 'Tom%'

where id in (1,2,3)

特点:

  • 走索引
  • 扫描一段范围,不是一条

6. index(全索引扫描)

含义:

扫描整个索引树,而不是扫数据表。

复制代码

select name from user;

name 有索引,优化器选择扫索引。

特点:

  • 比 ALL 好(索引通常比数据行小)
  • 但仍然扫描全部索引记录

7. ALL(最差)

含义:

全表扫描。

复制代码

select * from user where phone='138';

phone 没索引。

特点:

  • 从头到尾扫整张表
  • 大表非常慢

三、面试官最爱追问:为什么 index 比 ALL 好?

index

扫描的是:

复制代码

索引页

更小、更有序。

ALL

扫描的是:

复制代码

整行数据页

更大、更慢。


四、如何记忆(推荐)

复制代码

system const = 一条记录秒查

eq_ref ref = 索引关联/等值查询

range = 范围查

index = 扫全部索引

ALL = 扫整张表

相关推荐
snow@li14 小时前
HikariCP:高性能数据库连接池全景深入梳理
java·数据库
一个天蝎座的程序猿15 小时前
传统数据库迁金仓KES,空值问题差点让财务报表翻车
数据库
wWYy.15 小时前
Mysql:索引下推
数据库·mysql
风123456789~16 小时前
【Oracle专栏】ORA-02069: global_names 参数
数据库·oracle
ningmengjing_16 小时前
Redis 从入门到实战:Python操作全攻略
数据库·redis·python
隔窗听雨眠17 小时前
OceanBase旁路导入与自增主键冲突深度解析:原理、排查与解决方案
java·服务器·数据库
ZCBUS实时计算17 小时前
政务海量分库分表汇聚实战:基于 3 节点 ZCBUS 集群完成医保 10TB 数据实时整合
大数据·数据库·数据仓库·sql·dba·etl·政务
名不经传的养虾人17 小时前
从0到1:企业级AI项目迭代日记 Vol.81|工具调用前,先过一道审批门
数据库·人工智能·ai编程·ai工作流·企业ai
Databend18 小时前
Databend 产品更新:从 Spatial Index Join 到 Eval 数据管道
大数据·数据库·sql
数据知道18 小时前
SQL 注入从入门到精通:手工注入 + sqlmap 自动化
网络·数据库·sql·网络安全·自动化