[英]What is stored in the leaf node of clustered index
小心你读到的东西。 确保文章谈论“MySQL”及其主要“引擎”“InnoDB”。
主键存储的是真实记录的块地址,而不是真实的表记录。
数据的 B+Tree 的每个叶节点(块)中存储了几整行。 该 BTree 由PRIMARY KEY
排序,它(显然)是行的一部分。
唯一的“块地址”是两个图中的链接。
我投票支持你的 2 号图表,附带以下条件:
一个“块”为 16KB,可以容纳 1 到数百行,具体取决于
(对于数据或索引,每个块 100 行是一个简单的经验法则。)
In the context of mysql and innodb, from the mysql official pagehttps://dev.mysql.com/doc/refman/8.0/en/innodb-index-types.html
每个 InnoDB 表都有一个特殊的索引,称为聚集索引,用于存储行数据。
如果表很大,与使用与索引记录不同的页面存储行数据的存储组织相比,聚集索引架构通常会节省磁盘 I/O 操作。
基于上述事实,尤其是第 2 点,我相信第 2 点是正确的。 在我看来,原因是(1)节省一次 I/O。 如果叶子节点保存了页地址,将有更多的 I/O 时间来获取记录。
(2)更多的可维护性。 如果发生分页,叶子节点只保存页地址,聚集索引更新记录数据页地址会很麻烦。
但是,我认为#1 有观点的原因是只保存地址比保存整行记录数据便宜,因此存储更多索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.