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

标签 mysql innodb b-tree

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

我总是这样。我们都知道叶页充当 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;

We all know leaf page acts as index in a B+ tree data structure and the real data stored on the non-leaf page.

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

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

关于mysql - innodb如何知道一个页是叶子页还是非叶子页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52941537/

相关文章:

mysql - Innodb不接受外键

mysql - 为什么我的 MySQL 复合索引的基数小于同一列上的单个索引?

python - bsddb 和 reprepro (berkeley) 数据库

php - 存储过程不返回带有 PDO 语句的记录

MySQL 查找比需要更多的行(索引问题)

php - 带复选框的多重搜索

Mysql:前缀索引与索引

c++ - 如何在简单的树实现中使用智能指针

javascript - 使用ajax检查复选框时更新查询

MYSQL 两个不同表分组的总和