沃梦达 / IT编程 / 数据库 / 正文

一文解答什么是MySQL的回表

目录引言聚簇索引和非聚簇索引是什么?主键索引和非主键索引有什么区别?B-Tree和B+Tree的简单理解如何避免回表?引言简单来说,回表就是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+树中只有叶子节点会带有指向记录的指针,而B树则所有节点都带有,在内部节点出现的索引项不会再出现在叶子节点中。
  • B+树中所有叶子节点都是通过指针连接在一起,而B树不会。

如何避免回表?

使用覆盖索引,

到此这篇关于一文解答什么是MySQL的回表的文章就介绍到这了,更多相关MySQL回表内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

本文标题为:一文解答什么是MySQL的回表