我的数据库中有一个表代表一棵树。数据使用嵌套集存储。我想编写一个查询来搜索树并仅返回与模式匹配的节点,以及它们的祖先和后代。到目前为止,这是我想出的。
SELECT DISTINCT Node, Parent, Description
FROM Hierarchy
INNER JOIN
(SELECT Lft, Rgt
FROM Hierarchy
WHERE Description LIKE '%SEARCHQUERY%') AS Matches
ON (Hierarchy.Lft <= Matches.Lft AND
Hierarchy.Rgt >= Matches.Rgt) OR
(Hierarchy.Lft >= Matches.Lft AND
Hierarchy.Rgt <= Matches.Rgt)
ORDER BY Description
这个查询有效,但是当子查询匹配很多描述时它有点慢。我正在寻找有关如何提高此查询性能的想法。
如果它是相关的,我正在使用 Access。
我很自由并且愿意改变表的结构来改进这个查询。该表有大约 8000 个节点。在应用程序的整个生命周期中,记录的数量不会发生太大变化。最大深度为五。
常规搜索的性能是可以接受的(返回约 200 个节点的搜索需要几秒钟),但在病理情况下需要几分钟(例如,如果搜索单个元音。但即使在这些情况下,子查询也需要更少比一秒钟执行)。