我正在研究Oracle内部结构,我想知道文档中所说的“B树索引”实际上是经典的B树还是B+树?
我认为是一棵B+树,因为所有数据节点都存储在叶子节点上。此外,文档日“B-tree”所以我不确定。
文档没有使用术语“B+树”,但它确实详细描述了它的树结构,实际上他们描述的通常称为B+树。
例如,来自旧版本 (11.2) 的文档:
树枝块和叶子块
B树索引有两种类型的块:用于搜索的分支块 和存储值的叶块。 a的上层分支块 B树索引包含指向下层索引的索引数据 块。在图3-1中,根分支块有一个条目0-40,其中 指向下一个分支级别中最左边的块。这家分店 块包含 0-10 和 11-19 等条目。这些条目中的每一个 指向一个叶子块,该叶子块包含落在 范围。
https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT721
更好的问题是,“为什么 Oracle 不使用术语 B+ 树”。有可能Oracle对数据结构的实现并不完全是教科书上规定的。他们可能有不想讨论的专有优化,并且他们可能没有实现 B+ 树的某些功能(或者以与标准规范不同的方式实现)。谁知道呢。无论如何,即使他们使用的结构不是教科书上的 B+ 树,但正如您所怀疑的那样,它是 B+ 树的一种形式。
我也有同样的疑问。因为b树中的数据节点不仅可以是叶子节点,还可以是任意的。 这就是我对b树的理解