Bor*_*rys 5 postgresql indexing b-tree
我正在学习postgresql内部和我想知道或postgresql B树索引实际上是经典的B树或B +树?要拼写出来,这意味着节点只包含键或键值对?
iwi*_*wis 11
在我看来,PostgreSQL 使用的是 B+ 树。
(该图是这张图
的修改版)
Oracle、SQL Server、SQLite、DB2和MySQL使用 B+ 树。PostgreSQL 似乎也使用 B+ 树,因为:
文档似乎指出,只有树的叶子具有指向索引表中记录的指针:
每个叶页包含指向表行的元组。每个内部页面都包含指向树中下一个级别的元组。
当 Bruce Momjian谈到内部节点时,他没有提到它们有指向索引表中记录的指针。
文档中提到的 PostgreSQL 源代码的 src/backend/access/nbtree/README 文件包含以下注释:
B树索引
该目录包含 Lehman 和 Yao 的高并发 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 Database System论文中定义为 B 树,其中非叶节点没有指向索引表中记录的指针(它们仅具有指向其子节点的指针)。所以Wedekind定义的B*树结构是B+树。
B树.只有钥匙.索引的关键是存储键开头.数据位于表中,这些表是逻辑堆.这是维基百科的相关章节.
B树索引和表的物理存储在其他方面非常相似.它们使用相同的数据页面,大多数页面布局相同.更多内容在手册中.