【问题标题】:How does innodb know whether a page is leaf page or non-leaf page?innodb 如何知道一个页面是叶子页面还是非叶子页面?
【发布时间】:2018-10-24 12:49:21
【问题描述】:

我已经读了几个星期的mysql内部,有一个问题很困惑

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

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

叶子页面还是非叶子页面?有人请启发我吗?tks。

【问题讨论】:

  • 检查this Stack DBA article 讨论您的问题(我认为)。非叶子页面发生在 B 树的中间。在 B 树的最底部,当无法再遍历时,您会点击叶子页面。它们包含索引中的所有信息,如果您涵盖了其他列,可能还不止这些信息。
  • 非常感谢。 :D

标签: mysql innodb b-tree


【解决方案1】:

页眉中有一个 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,如果使用唯一索引作为主索引)的索引中。 PRIMARY 索引是 B+ 树。索引的键是主键字段。在非叶子页面中,键是键,值 - 是下面页面的页面 id。在叶子页面中,键又是键,但值是表字段的其余部分。

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

【讨论】:

    猜你喜欢
    • 2022-01-05
    • 2015-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2013-01-29
    • 1970-01-01
    相关资源
    最近更新 更多