【发布时间】: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