【发布时间】:2012-03-13 00:49:21
【问题描述】:
给定一个表(AccountId,ParentId NULL),我们希望能够快速找到: 1.主父ID(ParentId为null的accountId)。 2. 给定帐户 ID 的所有孩子。
使用 CTE,这相当容易。但是,我们不能将 CTE 保存在索引视图中,这会损害性能。我们已经提出了一些其他想法,比如将路径 (id1/id2/id3) 保存在另一个字段中,但这感觉有点 hacky。
我们想到了一个触发器,可以在每一行保存“主”ID,但我们不确定它在链的中间是如何工作的(1 拥有 2 拥有 3,但随后 2 转移到 7 )。它也不能解决“查找所有孩子”查询。
有什么想法吗?我们正在使用 SQL 2008 R2,但可以迁移到 SQL 2012。
【问题讨论】:
-
我不认为 SQL Server 2012 有任何功能可以在这里提供帮助。但是,如果没有更多的上下文,很难理解为什么物化 CTE 或创建索引视图(什么?)将是解决性能问题的神奇答案。您能否介绍一下表结构、索引、数据量以及您正在运行的太慢的查询?
-
ParentId 有索引覆盖吗?
标签: sql-server performance parent-child common-table-expression recursive-query