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

时间:2018-10-23 05:07:52

标签: mysql innodb b-tree

我已经阅读了几周的mysql内部知识,而这个问题令人困惑

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

非活页上存储的真实数据。但是我怎么知道是哪一个

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

1 个答案:

答案 0 :(得分:2)

页面标题中有一个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 +树数据结构中的索引,并且   存储在非页面上的真实数据。

这句话没有道理。您可以说表存储在名为PRIMARY的索引中,或者(如果将唯一索引用作主索引,则为GEN_CLUSTER_INDEX)。主索引是B +树。索引的键是主键字段。在非叶子页面中,键是键,值-是下面页面的页面ID。在叶子页中,键再次是键,但值是表字段的其余部分。

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