【问题标题】:How can I get the best Hierarchical Query performance in oracle如何在 oracle 中获得最佳的分层查询性能
【发布时间】:2011-10-11 17:00:03
【问题描述】:

我有一张表reply,其结构如下:

Id   name   parent_id ...
 1  reply1     0
 2  reply2     1
 3  reply3     2
 4  reply4     3
 5  reply5     4

这个表是建立在一个层次关系上的(某种父->子),我怎样才能根据一个replies的id获取所有子回复?我想使用一个 SQL 来实现最佳性能。因为replies 的数量确实很大,可能一棵树有超过 1000 行。

我尝试使用 START WITH 和 CONNECT BY,但性能有点差。

附录:

我生锈的 sql:

  SELECT * 
    from reply 
   start with (parent_Id=0 AND id=?) 
 connect by prior Id=parent_Id

Id 和 parent_id 都被索引,“connect by”语句似乎很昂贵,如果同时运行多个“connect by”SQL,它会导致数据库端的 CPU 使用率很高。例如:30个线程:执行一个查询大约需要30分钟

【问题讨论】:

    标签: sql oracle oracle10g oracle11g


    【解决方案1】:

    没有实际的解释计划,我们只能猜测。

    我认为你在parent_id 上的索引在这里没有帮助,因为你所有的“树”都从根 0 开始。我会让这个索引复合——即:(parent_id, id)。这应该会加快您的 start with 子句,之后应该使用 id 索引。

    【讨论】:

    • 对不起,我没有完全理解,请您告诉我更多。
    猜你喜欢
    • 1970-01-01
    • 2017-03-24
    • 2022-01-23
    • 2010-09-22
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    相关资源
    最近更新 更多