原始SQL语句如下:select a.rule_id as objid,
       a.parent_id as parentid,
       a.rule_name as objname,
       a.rule_num
  from be_t_rule a
  where a.model_id = '313200812040000802'
  start with a.parent_id = '-2147483647'
  connect by prior a.rule_id = a.parent_id执行时长:30秒以上说明: 目标表的总记录条数为--4000怎么回事啊,才4000条数据,这条语句要30秒以上才能完成.大家分析分析,是什么原因?

解决方案 »

  1.   

    看看oracle占用内存是不是其他程序也在占用。
      

  2.   

    你的model_id 和parent_id 都是什么类型?,NUMBER就不要加引号
      

  3.   

    你的各个字段都是什么类型的?NUMBER就不要加引号了
      

  4.   

    connect by 的效率本来就很低, 它是采用的递归演算法进行搜索的.
      

  5.   

    connect by在查询过程中无法使用索引,建议自己实现表函数. 
      

  6.   

     start with a.parent_id = '-2147483647' 
      connect by prior a.rule_id = a.parent_id 
    这样的查询效率本来就不高。
    而且还要看你的数据库当时的资源占用情况,还有你的表的逻辑结构,是不是在检索的条件上有索引等。
      

  7.   

    把a.model_id = '313200812040000802' 放在wher条件最后一行试试
      

  8.   

    lz把where条件改成这样试试。。
    where a.model_id = '313200812040000802' 
      start with a.parent_id = '-2147483647' 
      connect by prior a.rule_id = a.parent_id 
    and a.model_id = '313200812040000802'