データベースにツリーを表すテーブルがあります。データはネストされたセットを使用して保存されます。ツリーを検索し、パターンに一致するノードとその祖先および子孫のみを返すクエリを作成したいと思います。これは私がこれまでに思いついたものです。
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ノードがあります。レコードの数は、アプリケーションの存続期間を通じてあまり変化しません。最大深度は5です。
パフォーマンスは通常の検索(最大200ノードを返す検索の場合は数秒)では許容できますが、病理学的な場合には数分かかります(たとえば、単一の母音を検索する場合。ただし、これらの場合でも、サブクエリの所要時間は短くなります。実行するのに1秒以上)。