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

相关推荐
Java面试题总结1 天前
PostgreSQL 性能调优:内存、I/O 与连接管理
数据库·postgresql
北秋,1 天前
Oracle 数据库基础用法
数据库·oracle
CLX05051 天前
C#怎么实现全局异常过滤器_C#如何捕获控制器报错【核心】
jvm·数据库·python
多加点辣也没关系1 天前
设计模式-享元模式
数据库·设计模式·享元模式
牢七1 天前
Mailvelope
数据库
阿里云瑶池数据库1 天前
如何破解多租户隔离与性能难题?PolarDB PostgreSQL实战指南
数据库·postgresql
倔强的石头_1 天前
异构操作系统架构下的数据库表空间高级管理:路径兼容与自动化运维实战
数据库
倒霉熊dd1 天前
Python 学习(第二部分:函数、模块与面向对象编程)
前端·数据库·python
无盐海1 天前
Foundatio,内存,Redis 缓存
数据库·redis·缓存
六月雨滴1 天前
Oracle 数据库内存管理
数据库·oracle