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 = 扫整张表

相关推荐
东风破_8 小时前
从输入 juejin.cn 到看到页面:DNS、Nginx、服务器集群与 CDN 到底在做什么?
后端·mysql
小成很成8 小时前
mysql 8.0.21 升级 mysql 8.0.45(经过生产环境验证)
android·mysql·adb
东风破_8 小时前
从 0 设计一个博客数据库:用户、头像与文章表应该怎么建?
后端·mysql
保定公民9 小时前
达梦数据库存储过程中的数组类型详解:基础数组与记录数组的差异化应用
数据库·达梦·存储过程·达梦数据库·dm8·dm
梦Arrebol9 小时前
Redis 内容及相关实验
数据库·redis
大模型码小白10 小时前
Spring AI Tool 实现自然语言操作 MySQL 数据库详解
服务器·开发语言·数据库·人工智能·python·mysql·spring
云计算DevOps-韩老师11 小时前
【MySQL运维DBA】【SQL基础系列002篇】
运维·mysql·dba
DBA大董11 小时前
TDengine3.0 DBA常用的运维命令和SQL2
运维·数据库·时序数据库·dba·tdengine
放风铃的兔子12 小时前
15 年 DBA 经验:MySQL 迁移到 KES,哪些东西真的不用改?
mysql