xbba2004 2017-10-12 13:25 采纳率: 0%
浏览 808

oracle树形结构查询优化

SELECT DISTINCT CONNECT_BY_ROOT(SEG.SEGMID) CC
FROM ADDREGM SEG
WHERE EXISTS (SELECT 1
FROM ADDRSEGMEQP EQP
WHERE EQP.DELETESTATE = 0
AND EQP.RESTYPEID = 2530
AND SEG.SEGMID = EQP.ADDRSEGMID)
AND SEG.DELETESTATE=0
AND SEG.SEGMTYPE>=180007
START WITH SEG.SEGMTYPE=180007
CONNECT BY PRIOR SEG.SEGMID = SEG.PARENTSEGMID

    1、ADDREGM 标准地址表  ADDRSEGMEQP 标准地址绑定设备表
  2、查找SEGMTYPE大于180007节点SEGMID 如果查询到下级有一个RESTYPEID = 2530 的ADDRSEGMID 即该SEGMID为所需
    3、瓶颈 oracle的 start with connect by prior 是中序遍历 遍历所有节点,时间代价太大
  • 写回答

1条回答 默认 最新

  • lshen01 2023-03-16 10:17
    关注

    参考GPT和自己的思路:

    针对你的问题,我可以给出以下建议来优化oracle树形结构查询:

    1.使用递归查询代替connect by prior语句

    使用递归查询可以大大提高查询效率,因为它可以在较短的时间内找到符合条件的记录。相比之下,connect by prior语句的效率较低,因为它需要遍历整个树形结构。

    2.使用物化视图

    物化视图是一个结果集,可以作为基本表使用。它存储了树形结构的一部分,因此可以更快地检索数据。物化视图可以计划刷新,确保其数据与基本表保持同步。

    3.更改表结构

    如果树形结构所在的表结构不够优化,可以更改表结构以提高查询效率。例如,可以添加新的索引或更改列类型来提高查询速度。

    总之,优化树形结构查询可以通过使用递归查询、物化视图或更改表结构等方法来实现。这些方法可以大大提高查询效率,使查询更快速和高效。

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记