我正在学习关于postgresql的内部结构,我想知道或者postgresql B-tree索引实际上是经典的B-tree还是B + tree?要拼写出来,这意味着节点只包含键或键值对吗?
答案 0 :(得分:6)
B树。只有钥匙。索引的关键是存储键开头。数据位于表中,这些表是逻辑堆。这是related chapter on Wikipedia。
B树索引和表的物理存储在其他方面非常相似。它们使用相同的数据页面,大多数页面布局相同。 More in the manual.
答案 1 :(得分:2)
在我看来,PostgreSQL 使用 B+ 树。
(图片是对this picture的修改)
Oracle, SQL Server, SQLite, DB2 和 MySQL 使用 B+ 树。似乎 PostgreSQL 也使用 B+ 树,因为:
documentation 似乎表明只有树的叶子具有指向索引表中记录的指针:
<块引用>每个叶页包含指向表行的元组。每个 内部页面包含指向下一级的元组 树。
当 Bruce Momjian says 关于内部节点时,他没有提到它们有指向索引表中记录的指针。
文档中提到的 PostgreSQL 源代码的 src/backend/access/nbtree/README 文件包含以下注释:
<块引用>这个目录包含了雷曼和姚明高并发的正确实现 B树管理算法 (P. Lehman 和 S. Yao, Efficient Locking for Concurrent Operations on B-Trees, ACM Transactions on Database Systems,第 6 卷,第 4 期,1981 年 12 月,第 650-670 页)。
Lehman 和 Yao 使用名为 B* 树 的树结构,这是 Wedekind 在 On the selection of access paths in a data base system 论文中定义的 B 树,其中非叶节点没有指向记录的指针在索引表中(它们只有指向它们的子节点的指针)。所以Wedekind定义的B*树结构是B+树。