我已经读了几个星期的mysql内部代码,有一个问题让我困惑我们都知道叶页在b+树数据结构中充当索引,并且存储在非叶子页上的真实数据。但是我怎么知道是哪一个呢有叶页还是无叶页?有人能照亮我吗。
jecbmhm31#
页眉中有一个页面级别字段。如果它是零,那就是一页叶子。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+树。索引的键是次键字段,值是记录的主键。
PRIMARY
GEN_CLUSTER_INDEX
1条答案
按热度按时间jecbmhm31#
页眉中有一个页面级别字段。如果它是零,那就是一页叶子。
https://github.com/twindb/undrop-for-innodb/blob/master/c_parser.c#l657
众所周知,在b+树数据结构中,叶页作为索引,而实际数据存储在非叶页上。
这句话讲不通。可以说一个表存储在一个名为
PRIMARY
或者(GEN_CLUSTER_INDEX
如果将唯一索引用作主索引)。主索引是一个b+树。索引的键是主键字段。在非叶页中,键是键,值-是下面一页的页id。在叶页中,键又是键,但值是表字段的其余部分。二级索引也是b+树。索引的键是次键字段,值是记录的主键。