具体化CTE,或以其他方式提高性能



给定一个表(AccountId,ParentId NULL),我们希望能够快速找到:1.主父ID(ParentId为空的accountId)。2.给定帐户ID的所有子项。

有了CTE,这相当容易。但是,我们不能将CTE保存在索引视图中,这会影响性能。我们还提出了一些其他想法,比如在另一个领域保存路径(id1/id2/id3),但这感觉有点过时。

我们想到了一个触发器来保存每行的"主"ID,但我们不确定这在链的中间是如何工作的(1拥有2拥有3,但随后2转移到7)。它也不能解决"查找所有子项"的查询。

有什么想法吗?我们使用的是SQL 2008 R2,但可以改用SQL 2012。

在SQL 2008中,有一种hierarchyid类型,它基本上实现了将路径保存到根目录。http://technet.microsoft.com/en-us/library/bb677290%28v=sql.100%29.aspx

如果您的层次结构大多是静态的,那么另一种选择是使用该表的非规范化版本,每个子代都有一个父级的组合。因此,如果你的层次结构是A是B的父级,而B是C的父级的话,那么非规范化的表可以看起来像这个

parent child depth
A      A     0
A      B     1
A      C     2
B      B     0
B      C     1
C      C     0

现在,如果同时对父列和子列进行索引,则搜索层次结构的速度会非常快。

相关内容

  • 没有找到相关文章

最新更新