MySQL回表指的是什么
引言简单来说,回表就是MySQL要先查询到主键索引,然后再用主键索引定位到数据。下面,对一些问题进行分析与回答:什么是聚簇索引?什么是非聚簇索引?为什么回表要先查到主键索引?主键索引和非主键索引有什么区别?如何避免回表?聚簇索引和非聚簇索引是什么?MySQL的索引有不同的角度的分类方式,例如:按数据结构分、按逻辑角度分、按物理存储分。其中,按物理存储分有两种索引:聚簇索引和非聚簇索引。简单来说,聚簇索引是主键索引。主键索引之外的就是非聚簇索引,非聚簇索引又叫辅助索引或者二级索引。主键索引和非主键索引有什么
引言
简单来说,回表就是 MySQL 要先查询到主键索引,然后再用主键索引定位到数据。
下面,对一些问题进行分析与回答:
什么是聚簇索引?什么是非聚簇索引?
为什么回表要先查到主键索引?
主键索引和非主键索引有什么区别?
如何避免回表?
聚簇索引和非聚簇索引是什么?
MySQL 的索引有不同的角度的分类方式,例如:按数据结构分、按逻辑角度分、按物理存储分。
其中,按物理存储分有两种索引:聚簇索引和非聚簇索引。
简单来说,聚簇索引是主键索引。
主键索引之外的就是非聚簇索引,非聚簇索引又叫辅助索引或者二级索引。
主键索引和非主键索引有什么区别?
相同点:都使用的是 B+Tree 。
不同点:叶子节点存储的数据不同
主键索引的叶子节点存储的是一行完整的数据;
非主键索引的叶子节点存储的是主键值。叶子节点不包含记录的全部数据,非主键的叶子节点除了用来排序的 key 还包含一个书签(bookmark),其中存储了聚簇索引的 key。
那么这两种索引在使用方面上有什么区别呢?
使用主键索引查询:
# 主键索引的的叶子节点存储的是**一行完整的数据**, # 所以只需搜索主键索引的 B+Tree 就可以轻松找到全部数据 select * from user where id = 1;
使用非主键索引查询:
# 非主键索引的叶子节点存储的是**主键值**, # 所以MySQL会先查询到 name 列的索引的 B+Tree,搜索得到对应的主键值 # 然后再去搜索该主键值查询主键索引的 B+Tree 才可以找到对应的数据 select * from user where name = 'Jack';
可以看出使用非主键索引要比主键索引多使用一次 B+Tree。
B-Tree 和 B+Tree 的简单理解
理解聚簇索引和非聚簇索引的关键在于 B+Tree 的理解。
用一幅图来表示,其它的就不再过多解释了:

这里只是简单介绍一下 B-Tree 和 B+Tree 的区别:
B+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。
B+树中所有叶子节点都是通过指针连接在一起,而B树不会。
如何避免回表?
使用覆盖索引,所谓覆盖索引就是指索引中包含了查询中的所有字段,这种情况下就不需要再进行回表查询了。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















