需要有关递归 CTE 性能的帮助。低于 CTE 的运行速度非常慢,因为它试图以递归方式提取分层数据。表很大,每个根 ID 最多有 3 个递归 itemid。可能有大约 200000 个或更多的 root id。我知道递归 CTE 对于庞大的数据集来说很慢,因为对于锚点中的每个 rootid,它都会递归地进行 itemid。
架构:
Create table RootItem (ItemId int primary key, RootIt int , insertdate datetime)
Run Code Online (Sandbox Code Playgroud)
上表有超过 100 万行。
CTE 查询:
; With rootcte as
( select itemid from RootItem where rootid is null
union all
select r.itemid as RootId , i.itemid from RootItem i join rootcte r
on i.rootid = r.itemid
)
Run Code Online (Sandbox Code Playgroud)
我们无法修改表架构并使用层次结构。我也试过 while 循环,但这也很慢。
有没有其他方法可以优化此查询?
; With rootcte as
( select itemid from …
Run Code Online (Sandbox Code Playgroud)