有关SQL Server HierarchyID性能问题的深度优先
技术问答
177 人阅读
|
0 人回复
|
2023-09-14
|
我正在尝试包含大约5000行表(dbo。[Message])中实现hierarchyID(未来会大幅增加)。然而,检索大约25个结果需要30个。-40秒。/ ?0 A4 C2 k! z% l1 \; c
根节点是填充符,以提供独特性,所以后续的每一行都是哑行的子级。) `% L3 r5 Z# t- p% P7 a- N5 d5 [' X
我需要能够深度优先考虑遍历表,并让步hierarchyID列(dbo。[Message]" D+ W9 Y: Y* E' n+ C
.MessageID)成为聚类主键,增加计算收入smallint(dbo。[Message] .Hierarchy),存储节点的级别。8 C* C% u; k: G+ i- o ?* F
用法:一个.Net通过一个应用程序architectureID当值传输到数据库时,我希望检索节点的所有子代和父代(如果有的话)(除了根,因为它是填充符)。
! v- Y6 d7 X* Y/ T) I; e8 m/ M* }我正在使用查询的简化版本:6 l* v! W. S& d, \9 z
@MessageID hierarchyID /* passed in from application */SELECT m.MessageID,m.MessageCommentFROM dbo.[Message] as mWHERE m.Messageid.IsDescendantOf(@MessageID.GetAncestor((@MessageID.GetLevel()-1))) = 1ORDER BY m.MessageID据我所知,索引应在没有任何提示的情况下自动检测。! L7 B0 z, ~% a0 @! w2 q$ t
从搜索论坛上,我看到人们在处理广度优先索引时使用索引提示,但在深度优先的情况下没有观察到这个应用程序。这是一种与我的计划相关的方法吗?
$ j6 R2 j0 b- v7 k% I* d在过去的几天里,我一直在寻找解决这个问题的方法,但没有用。我会非常感激的。这是我的第一篇文章。如果这被认为是一个烦人的问题,我提前道歉,我已经读过了MS文档并搜索了无数论坛,但没有看到对它的简洁描述。具体问题。
|+ {/ g: E: ]6 n0 e M
* m! n) i0 {) I1 N! X8 z+ Y 解决方案:
! H) L& e. x! j* c 在这里找到解决方案:http :
. d6 a" V u4 A. N1 ^//connect.microsoft.com/SQLServer/feedback/details/532406/performance-issue-
% f5 F8 e5 ^9 k# X. I3 swith-hierarchyid-fun-isdescendantof-in-where-
: D; ^; r; P0 c6 ^4 s9 Rclause#" A( I# Q8 [. I7 k8 A1 k6 d' W
提醒我,我heirarchyID它来自应用程序,我的目标是检索任何值得的亲戚(祖先和后代)。3 `5 R9 p9 p Y. t4 h
我必须在我的具体例子中SELECT在句子之前添加以下声明:* r9 ^; k5 r9 B. X
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子句已改为:2 a/ M1 s1 b- R! I& z
messageid.IsDescendantOf(@topNode)=1 AND (messageid > @leftNode ) AND (messageid 提高查询性能非常重要:
+ h3 ~7 b2 w3 I" x$ q平均搜索时间为20毫秒(从120到420)。% ~+ x+ v5 R6 B, z# _9 _- e
查询25个值时,以前需要25个-35秒返回所有相关节点(在某些情况下,每个值都有很多亲戚,在某些情况下没有亲戚)。现在只需要2秒钟。
7 L! \7 b. m3 T+ l$ d D, L非常感谢所有在这个网站和其他网站上为这个问题做出贡献的人。 |
|
|
|
|
|