ZBLOG

mysql B+树底层实现

MySQL 中的 B+ 树实现主要分为两部分:节点页和数据页。

节点页:

B+ 树节点页是指存储索引节点的物理页,每一页大小通常设置为 16 KB。一个节点页通常包括一个页头和一组索引项(或子节点指针)。

  • 页头:记录该页所属表的表空间 ID、页类型、页文件名等信息。
  • 索引项:记录数据页中键值的最大值及其对应的数据页指针。

B+ 树节点页的结构如下(以 InnoDB 引擎为例):

|--------------------------------------------------------|
| FIL Header                                             |
|--------------------------------------------------------|
| Node Header                                            |
|--------------------------------------------------------|
| Infimum Record                                         |
|--------------------------------------------------------|
| Index Records                                          |
|--------------------------------------------------------|
| Supremum Record                                        |
|--------------------------------------------------------|
| Free Space Info                                        |
|--------------------------------------------------------|
| File Trailer                                           |
|--------------------------------------------------------|

其中,Infimum Record 和 Supremum Record 是为了实现闭区间查询而增加的虚拟记录,不存储实际数据,只有索引键值。

InnoDB 的 B+ 树实现采用了自适应哈希索引算法,即在节点页上设置一个 Hash 表,用于提高查找效率。

数据页:

数据页是指存储表中数据的物理页,同样大小为 16 KB,每个数据页通常包括一个页头和一组记录。记录通常按照主键排序,并且每条记录都包括主键和数据列的值。

数据页的结构如下(以 InnoDB 引擎为例):

|--------------------------------------------------------|
| FIL Header                                             |
|--------------------------------------------------------|
| Page Header                                            |
|--------------------------------------------------------|
| User Records                                           |
|--------------------------------------------------------|
| Free Space Info                                        |
|--------------------------------------------------------|
| File Trailer                                           |
|--------------------------------------------------------|

其中,Page Header 记录了该页的一些元数据信息,例如页类型、页大小、记录数等。

在 B+ 树索引中,每一个节点都可以是存储数据的叶子节点,因此在查询时只需要从根节点开始逐级查找即可。而由于 B+ 树的多路平衡性质,在插入和删除操作时也不会导致树的不平衡。因此,B+ 树被广泛应用于数据库领域,成为实现高效索引的重要工具之一。

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=82

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?