跳转至

回表是什么

一、什么是回表

普通索引查到主键,再去主键索引查完整数据。

二、过程

select * from t where name = '张三'
  1. 走 name 索引,找到 id=100。
  2. 拿 id=100 去主键索引查整行。

第二步就是回表。

三、为什么慢

两次 B+ 树查询。

四、怎么避免

覆盖索引

查的字段都在索引里,不用回表。

select id, name from t where name = '张三'

name 索引里有 id 和 name,直接返回。

explain 看

Extra 列显示 Using index 就是覆盖索引。

五、例子

索引 查询 是否回表
idx_name(name) select * where name=? 回表
idx_name(name) select id, name where name=? 不回表

一句话

回表 = 普通索引查主键 → 主键索引查整行。覆盖索引避免回表。