求助一个机构层级对应关系视图的问题

[复制链接]
查看11 | 回复8 | 2012-5-21 10:19:41 | 显示全部楼层 |阅读模式
下面的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;

回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
重新设计id,让它包含层级,就像地址码
北京11
北京东城110101
...
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
〇〇 发表于 2016-12-15 13:05
重新设计id,让它包含层级,就像地址码
北京11
北京东城110101

然后只要
id like '1101%'
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
〇〇 发表于 2016-12-15 13:06
然后只要
id like '1101%'

你这个等于把他的agency_path这一步减少了。like和他的instr其实还是一样,而且从他的要求来看,还不是单%估计是%%,数据量大非等值,走不了hash导致时间长。
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
Naldonado 发表于 2016-12-15 15:41
你这个等于把他的agency_path这一步减少了。like和他的instr其实还是一样,而且从他的要求来看,还不是单 ...

我的意思是:
with agency as
(select '0000' ag,'' upag, '0000'id from dual union all
select '0001' ag,'0000' upag,'00000001' from dual union all
select '0002' ag,'0001' upag,'000000010002'from dual union all
就根本不需要视图

回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
〇〇 发表于 2016-12-15 16:05
我的意思是:
with agency as
(select '0000' ag,'' upag, '0000'id from dual union all

select a.ag,
a.ag_level,
b.ag child_ag,
b.ag_level child_level
我比较想最后数据展现成这个样子,毕竟写这视图是为了给别人在程序里用,这样查下级和倒查上级都比较清晰易用一点


回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
oracle不是层次数据库,处理层次天生就不高效
回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
如果是要展开全部子树,去掉agency_path的START WITH条件,加上connect_by_root (ag),但是LEVEL不能实时计算,得事先存在表里。

回复

使用道具 举报

千问 | 2012-5-21 10:19:41 | 显示全部楼层
newkid 发表于 2016-12-16 00:38
如果是要展开全部子树,去掉agency_path的START WITH条件,加上connect_by_root (ag),但是LEVEL不能实时计 ...

啊这个可以用,十分感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行