1
回答
oracle 递归查询 start with connect by prior 性能优化
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

select aa.ufid from utcustomer aa
start with aa.ufparentid in (
      select b.res_code
      from usms.sec_role_user a
      inner join usms.sec_acl_cnmsvip b
      on a.role_id = b.role_id
where a.user_iidd = 'vipcust'
and b.oper_id = '30901'
)
connect by prior aa.ufparentid = aa.ufid

上面的sql执行没有任务问题,一旦把上面的sql嵌套在其它语句里就慢得要死,几十条语句查询要90多秒

 select RESCODE, RESPARENTCODE, RESNAME from v_customer_res WHERE
 resCode in(
select aa.ufid from utcustomer aa
start with aa.ufparentid in (
      select b.res_code
      from usms.sec_role_user a
      inner join usms.sec_acl_cnmsvip b
      on a.role_id = b.role_id
where a.user_iidd = 'vipcust'
and b.oper_id = '30901'
)
connect by prior aa.ufparentid = aa.ufid
)

上面的语句执行,数据量只有7条却要耗时90多秒。

create index idx_sec_role_user_role_id  on usms.sec_role_user(role_id);

create index idx_sec_acl_cnmsvip_res_code on usms.sec_acl_cnmsvip(role_id,res_code);

试着建立了上面两个索引,也完全没有效果

递归查询用得少,现在网站因为这个sql问题,严重影响用户体验,提问大家有什么办法优化吗,小弟非常感谢!

 

 

 

 

 

举报
overtake
发帖于3年前 1回/3K+阅
顶部