首页 > 解决方案 > innodb 如何知道一个页面是叶子页面还是非叶子页面?

问题描述

我已经阅读 mysql internals 几个星期了,一个问题很困惑

我总是。我们都知道叶页在 B+ 树数据结构中充当索引,并且

存储在非叶子页面上的真实数据。但是我怎么知道哪个是

叶页还是非叶页?有人请启发我吗?

标签: mysqlinnodbb-tree

解决方案


页头中有一个 PAGE_LEVEL 字段。如果为零,则为叶页。

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+ 树数据结构中充当索引,而真实数据存储在非叶子页面上。

这句话没有意义。您可以说一个表存储在一个名为PRIMARYor 的索引中(GEN_CLUSTER_INDEX如果使用唯一索引作为主索引)。PRIMARY 索引是 B+ 树。索引的键是主键字段。在非叶子页面中,键是键,值 - 是下面页面的页面 id。在叶页中,键又是键,但值是表字段的其余部分。

二级索引也是 B+ 树。索引的键是辅助键字段,值是记录的主键。


推荐阅读