使用SQL实现B + Tree结构

时间:2012-12-13 10:57:27

标签: sql database-design tree relational-database

我很清楚纯sql中现有的二叉搜索树实现,但我无法想象如何构建实现B + Tree数据结构的数据库模型。它甚至可能吗?

非常感谢任何见解。

1 个答案:

答案 0 :(得分:0)

  1. B + Tree和Binary搜索不一样。
  2. 可以在表格中使用B + Tree结构(假设您知道它是什么)。
  3. 如果推荐2是否值得研究,但我们公司做了很多。

    在桌面上使用B + Tree的一个例子是:

    ColId       SomeData        ParentId
    ------------------------------------
      1           Data 1          null
      2           Data 2          null
      3           Data 3            1
      4           Data 4            1
      5           Data 5            3
    

    等等。通过查看父ID,您可以找到项目5的父项。并且您可以制作/重用各种方便的算法来查找项目及其位置。使用具有较大增量的ColId,例如10或100的增量,可以留出空间将项目插入树中。

    例如......第5项的父项是第3项。祖父母是第1项。任何具有null的东西都是根(起始)项目......它们没有父项。

    您可以想象,搜索速度非常快,但更新或添加速度相当慢(如果您不按照上面的建议留出空间)。如果你确实留空,那么当你的空间不足并且不得不重写这些物品时,它的添加速度很慢。假设你教好了你的数据,这不应该经常发生。如果确实如此,那么B + Tree可能不是那种特定格式的理想选择。一般来说,如果您的数据上的大多数操作都是读取/搜索/过滤等,B + Tree结构都很棒。但是如果有很多更新和添加,可能不太好。

    由于你的问题似乎是关于如何在sql server表中使用B + Tree格式,我将让你看看它和二进制搜索之间的区别。二进制搜索是一种算法,用于通过首先对集合进行排序来搜索某些内容,然后每次除以一半,直到找到您要查找的内容。 B + Tree也可用于搜索,但不同,因为它在层次结构上运行(因此名称为Tree)。