请教高手们一个关于rownum=1的问题,例子:
select * from t1 
where exists(select 1 from t2 
              where t2.grbh=t1.grbh 
                and rownum=1);t2表中的grbh有建索引,但不是主键,这种情况下,使用rownum=1和不使用rownum=1,在执行效率上是否有区别?

解决方案 »

  1.   

    有比较大的区别。在select 1 from t2  
      where t2.grbh=t1.grbh  
    这条语句中,即使grbh有索引,但是通过执行计划,可以查到,该索引根本上就不会用到。也就是,这条语句返回的记录可能会有很多条。使用rownum=1后,该语句返回的值只有一条记录,使用exists效率也就得到提高。
      

  2.   

    ---t2表中的grbh有建索引,但不是主键,这种情况下,使用rownum=1和不使用rownum=1,在执行效率上是否有区别?
    使用rownum=1执行的效率高,不使用rownum=1效率会比它低一些,具体可以看一下执行的计划了。
      

  3.   

    是不是可以这样理解:如果都有数据,有rownum=1查到一条就马上返回1,没有rownum=1就把所有数据都查出来再返回1?