有人在生产中使用 HierarchyId 吗?它可靠吗?

A-K*_*A-K 21 sql-server-2008 sql-server hierarchy

是否有人在实际生产中使用 HierarchyId 使用合理大小的表,超过几千行?它可靠/性能好吗?到目前为止,我还没有发现任何与供应商无关的人推荐它,并且 Paul Nielsen在这里建议不要使用它。

您在实际生产系统中使用 HierarchyId 的经验是什么?

当您选择 HierarchyId 而不是其替代品时,您使用了哪些标准?

Kir*_*rst 9

我已经实现了 HierarchyID 并发现它提供了良好的性能并且易于使用。

我已经将它用于相对较小的数据集(数万行),其层次结构高达 10 个分支深。

为什么要使用它?HierarchyID 类型提供了许多辅助方法(例如IsDescendantOf),它们使您的工作比滚动您自己的具体化路径更容易。

Paul Nielsen 对 StackOverflow 的评论让我感到困惑——HierarchyID一个具体化的路径。我更倾向于同意他的回答下面的这个评论

一个更好的问题可能是“为什么不使用它”。它易于使用,提供了许多您本来可以自己编写的功能,并且性能良好(在我有限的测试中)。

  • 凭记忆你可以。您将使用跨 HierarchyID 的函数来确定父值,为该值创建一个持久计算列,然后在该值和父值之间应用 FK 约束。 (3认同)

A-K*_*A-K 6

这是对 Kirk 问题“为什么不使用它 (HierarchyId)”的回答。与实体化路径相比,在某些重要情况下,HierarchyId 似乎性能较低,使用起来也不太方便。

原因很简单:引用Microsoft 对 Connect 的评论“问题是 CLR 调用,包括hierarchyID 的方法,对查询优化器来说是不透明的。这是设计使然。但是,这意味着它们的基数估计有时可能相当错误的。”

另一方面,实现物化路径在我们第一次需要时非常容易,下次它本质上是一个复制和粘贴任务。因此,我们只需很少的努力即可获得更通用、性能更好的解决方案。

所以我完全同意 Paul Nielsen,他在他的优秀著作《Microsoft® SQL Server® 2008 Bible》中写道:“新的 HierarchyID 并非没有争议。它是新的,获得了大量的新闻和演示时间,但我'我不确定这是一个需要其他解决方案的问题。”