select * from a  
            where a.EVALUATE='true'  
            and a.name='1'  
start with employee= '12345678'  
connect by prior employee=manager
是先执行start with构造层次结构,再执行where条件筛选呢还是先执行where条件再构造层次。
第一次a表中数据为2万条,第二次将表中数据增大到20万条,但满足where条件的数据数仍然是2万条,速度慢了很多。可以看出是先执行start with,再执行where条件。
问:如何才能先执行where条件,在选定的记录上执行start with呢?

解决方案 »

  1.   

    你可以先写where然后包上层,然后再start with啊
    这样就保证先执行最里面的SQL,WHERE就滤掉了
      

  2.   

    楼上的指的写法是这样吗
    select * from( select * from a   
                where a.EVALUATE='true'   
                and a.name='1')   
    start with employee= '12345678'   
    connect by prior employee=manager 
    试了这样,好像速度并没有明显改善
      

  3.   

    你两种方式看下执行计划,就知道有没有区别了
    如果没有区别,就说明是先执行where再执行start
      

  4.   

    2万条数据时,执行
    A.
    select * a    
                where a.EVALUATE='true'    
                and a.name='1'  
    start with employee= '12345678'    
    connect by prior employee=manager 
    耗时7S
    20万条数据时,执行 
    B.
    select * from( select * from a    
                where a.EVALUATE='true'    
                and a.name='1')    
    start with employee= '12345678'    
    connect by prior employee=manager
    耗时14S,比上面慢了一倍。但如果仍用A执行20万条数据,耗时60S。
    可以看出先执行了from里的字句,再执行start with.
    但范围限制在2万条数据,速度为什么还是慢了一倍呢