回表是什么¶
一、什么是回表¶
普通索引查到主键,再去主键索引查完整数据。
二、过程¶
- 走 name 索引,找到 id=100。
- 拿 id=100 去主键索引查整行。
第二步就是回表。
三、为什么慢¶
两次 B+ 树查询。
四、怎么避免¶
覆盖索引¶
查的字段都在索引里,不用回表。
name 索引里有 id 和 name,直接返回。
explain 看¶
Extra 列显示 Using index 就是覆盖索引。
五、例子¶
| 索引 | 查询 | 是否回表 |
|---|---|---|
| idx_name(name) | select * where name=? | 回表 |
| idx_name(name) | select id, name where name=? | 不回表 |
一句话
回表 = 普通索引查主键 → 主键索引查整行。覆盖索引避免回表。