innodb如何知道一个页面是叶子页面还是非叶子页面?

5cg8jx4n  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(482)

我已经读了几个星期的mysql内部代码,有一个问题让我困惑
我们都知道叶页在b+树数据结构中充当索引,并且
存储在非叶子页上的真实数据。但是我怎么知道是哪一个呢
有叶页还是无叶页?有人能照亮我吗。

jecbmhm3

jecbmhm31#

页眉中有一个页面级别字段。如果它是零,那就是一页叶子。
https://github.com/twindb/undrop-for-innodb/blob/master/c_parser.c#l657

int leaf_page = mach_read_from_2(page + PAGE_HEADER + PAGE_LEVEL) == 0;

众所周知,在b+树数据结构中,叶页作为索引,而实际数据存储在非叶页上。
这句话讲不通。可以说一个表存储在一个名为 PRIMARY 或者( GEN_CLUSTER_INDEX 如果将唯一索引用作主索引)。主索引是一个b+树。索引的键是主键字段。在非叶页中,键是键,值-是下面一页的页id。在叶页中,键又是键,但值是表字段的其余部分。
二级索引也是b+树。索引的键是次键字段,值是记录的主键。

相关问题