我们有一个建模树的数据库。这些数据可以增长得相当大,也就是说很多,可能有数百万行。(主键实际上是 a bigint
,所以我想我们可能希望支持数十亿行,尽管这可能永远不会发生)。
单个节点可以有非常大量的直接子节点,它们在层次结构中的位置可能越高。我们对叶子的实际最大深度没有指定限制,即一个必须遍历多少个节点才能到达根,但实际上这通常最多不会超过几百个。通常它可能会低于20。
此表中的插入非常频繁,需要高性能。插入的插入节点总是叶节点,并且总是在最后一个兄弟节点之后。节点永远不会移动。删除总是作为整个子树进行的。查找子树是对该表进行的另一项操作。它没有相同的性能要求,但我们当然希望它尽可能快。
今天,这是使用父/子模型建模的,该模型对于插入非常有效,但对于查找子树却非常缓慢。当表变大时,这会变得非常缓慢,并且查找子树可能需要几分钟时间。
所以我正在考虑将其转换为可能在 SQL Server 中使用新的 hierarchyid 类型。但是我很难确定这是否合适。据我了解,对于我们在这种情况下执行的操作,这样的树将是一个好主意。(如果我在这里错了,请纠正我)。
但它也指出,hierarchyid 的最大大小是 892 字节。但是,我找不到任何关于这在实践中意味着什么的信息。hierarchyid 是如何编码的?我会用完hierarchyid,如果是,什么时候?