您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

有关SQL Server HierarchyID深度优先性能的问题

有关SQL Server HierarchyID深度优先性能的问题

在这里找到解决方法http ://connect.microsoft.com/sqlServer/Feedback/details/532406/performance-issue- with-hierarchyid-fun-isdescendantof-in-where- clause#

只是提醒我,我heirarchyID是从应用程序传递过来的,我的目标是检索该值的任何和所有亲戚(祖先和后代)。

在我的特定示例中,我必须在SELECT语句之前添加以下声明:

declare @topNode hierarchyid = (select @messageID.GetAncestor((@messageID.GetLevel()-1)))
declare @topNodeParent hierarchyid = (select @topNode.GetAncestor(1))
declare @leftNode hierarchyid= (select @topNodeParent.GetDescendant (null, @topNode))
declare @rightNode hierarchyid= (select @topNodeParent.GetDescendant (@topNode, null))

WHERE子句已更改为:

messageid.IsDescendantOf(@topNode)=1 AND (messageid > @leftNode ) AND (messageid < @rightNode )

查询性能的提高非常重要:

对于每个传入的结果,查找时间现在平均为20毫秒(从120到420)。

查询25个值时,以前需要25-35秒才能返回所有相关节点(在某些情况下,每个值都有很多亲戚,在某些情况下则没有亲戚)。现在仅需2秒钟。

非常感谢所有在此站点和其他站点上对此问题做出贡献的人。

SQLServer 2022/1/1 18:46:41 有509人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶