mysql - innodb 如何知道一个页面是叶子页面还是非叶子页面?
问题描述
我已经阅读 mysql internals 几个星期了,一个问题很困惑
我总是。我们都知道叶页在 B+ 树数据结构中充当索引,并且
存储在非叶子页面上的真实数据。但是我怎么知道哪个是
叶页还是非叶页?有人请启发我吗?
解决方案
页头中有一个 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
or 的索引中(GEN_CLUSTER_INDEX
如果使用唯一索引作为主索引)。PRIMARY 索引是 B+ 树。索引的键是主键字段。在非叶子页面中,键是键,值 - 是下面页面的页面 id。在叶页中,键又是键,但值是表字段的其余部分。
二级索引也是 B+ 树。索引的键是辅助键字段,值是记录的主键。
推荐阅读
- swift - 连续的单元测试失败,尽管它们单独成功
- javascript - 将页脚粘贴到页面底部
- angular - rxjs:使用 rxjs 自定义运算符更改 HttpRequest
- security - 验证 Tuxedo 服务身份验证和加密
- android - 在 Android Auto 中向服务请求权限
- java - 读取带有注释的属性文件时出现 Vert.x-Config 异常
- javascript - 如果原始空白,Javascript推送到数组添加逗号
- java - 为什么方法在每个数组中返回多个值而不是一个?
- android - 如何在不每次重新创建片段的情况下在片段之间切换?
- javascript - 如何控制表单中的输入值