B +树或B树

时间:2014-07-28 21:17:12

标签: postgresql indexing b-tree

我正在学习关于postgresql的内部结构,我想知道或者postgresql B-tree索引实际上是经典的B-tree还是B + tree?要拼写出来,这意味着节点只包含键或键值对吗?

2 个答案:

答案 0 :(得分:6)

B树。只有钥匙。索引的关键是存储键开头。数据位于表中,这些表是逻辑堆。这是related chapter on Wikipedia

B树索引和表的物理存储在其他方面非常相似。它们使用相同的数据页面,大多数页面布局相同。 More in the manual.

答案 1 :(得分:2)

在我看来,PostgreSQL 使用 B+ 树。

B-tree和B+树的区别

  • 在 B 树中,指向索引表中记录的指针不仅位于树的叶子中,还位于树的所有内部节点中。
  • 在 B+ 树中,指向索引表中记录的指针仅位于树的叶子中。 B+ 树相对于 B 树的优势描述为 here

the picture is a modification (图片是对this picture的修改)

B+树在DBMS中的使用

Oracle, SQL Server, SQLite, DB2MySQL 使用 B+ 树。似乎 PostgreSQL 也使用 B+ 树,因为:

  • documentation 似乎表明只有树的叶子具有指向索引表中记录的指针:

    <块引用>

    每个叶页包含指向表行的元组。每个 内部页面包含指向下一级的元组 树。

  • 当 Bruce Momjian says 关于内部节点时,他没有提到它们有指向索引表中记录的指针。

  • 文档中提到的 PostgreSQL 源代码的 src/backend/access/nbtree/README 文件包含以下注释:

    <块引用>

    Btree 索引

    这个目录包含了雷曼和姚明高并发的正确实现 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+树。