Léo*_* 준영 3 postgresql index database-internals
我想估计使用 B-tree 方法需要多少次读取 PostgreSQL 的部分索引,因为我无法直接更改块大小。PostgreSQL 手册关于这里的索引和这里关于块大小的信息,对于 aux 来说是 100,所以有 3 次读取。
块大小占用的默认内存为 8 KB,即通常为 1 个块,但我不确定这是否可行,因为它log_1(2)是无穷大。我的想法是动态计算的读取次数也可能在PostgreSQL的这里考虑的B树块尺寸决定读取次数。我想知道块大小log_b n中b有多少:块大小在哪里n,事件数在哪里。我认为它在数学上不可能是一个。我认为 Postgres B-tree 是按照 Wiki 页面中描述的标准方式实现的,也由 Cormen 等人描述。
基于此答案,B 树索引仅包含 PostgreSQL 中的键。然后数据再次位于作为逻辑堆的表中。索引的重点是存储密钥。数据位于表中,表是基于here 的逻辑堆。我对 PostgresSQL 如何创建名为 B-tree 的实体感兴趣。基于此处,B 树索引和表的物理存储使用相同的数据页,并且页面布局几乎相同。但是,我对这个实体如何协同工作很感兴趣。索引和数据的功能大概可以这样描述:
B 树从根生长,而不是从叶子生长。
但更准确地说,来自 Sumathi 关于关系数据库管理系统的基础知识(计算智能研究):
在 B 树中,非叶节点比叶节点大。指向数据记录的指针存在于树的所有级别。
在 B+tree 中,指针只存在于叶子上。你如何评估 B 树的指针系统?您如何描述 PostgreSQL B 树占用的大 O 空间?Postgres 是如何制作 B 树索引的?
马西,
PostgreSQL B-Tree 索引非常强烈地基于Lehman 和 Yao的实现,其中包括很多围绕多版本并发控制的工作,但本文中仍然有很多信息。
当然,PostgreSQL 并没有对论文中的方法做 100% 准确的复制,要找出差异,除了(1)找懂 PostgreSQL B-Tree 的人之外几乎别无他法, 并有时间仔细阅读复杂的解释,或者(2)自己挖掘源代码。
另一种可能性是让您访问Bruce Momjian 的优秀参考网站,在那里他更详细地讨论了 PostgreSQL 内部结构。
但是,在这种情况下,根据您问题的性质,我觉得您可能对 B 树索引的工作方式有根本的误解。在这种情况下,我认为进行一点 Google 搜索,或者阅读Elmasri 和 Navathe 的《数据库系统基础》等教科书的一部分会对您有所帮助。