下面的sql是我遇到问题的简化版,真实情况的agency表记录数10w左右,层级深度到10层左右;
我需要构造一个视图,可以查询任意agency的所有下层agency,例如我用一个level 1的agency去查,查询结果里就展现这个agency的所有下层,level 2,3,4..的有多少层的全要,
目前的sql是可以实现我的要求,但是真实效率极其低下,跑一下要20分钟以上,我目前是用物化视图在做,但20分钟的刷新时间还是不能忍。
应该是instr( b.ag_path , '>' || a.ag || '>') > 0
and a.ag_level ')||'>' ag_path,
level ag_level
from agency a
start with a.upag is null
connect by prior a.ag = a.upag)
select a.ag,
a.ag_level,
b.ag child_ag,
b.ag_level child_level
from agency_path a, agency_path b
where instr( b.ag_path , '>' || a.ag || '>') > 0
and a.ag_level <= b.ag_level;
|