今天主要和大家分享一下近期学习rownum的一个体会。直接看下面的例子吧.
下面的测试都是在10.2.0.1上面测试的
通过上面的例子,我们发现F这个函数调用了1000000次,这样严重的影响了性能。为了减少调用次数,我的方法是在T1表关联T2表之前就先调用F函数,这样的话就能减少调用次数了。所以我把SQL改写了,如下:
但是叫我不能理解的是,这样写了以后SQL执行计划和原来还是一样啊。后来我想到了rownum的特性。
ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集,比如写sql的时候我们不写rownum>N,就证明了这个观点)。简单的说 rownum 是对符合条件结果的序列号。
后来我的SQL加上rownum以后,发现这样就可以了。
后来我查询相关文档后,发现这个问题,在oracle11g 11.2.0.3以后版本中才不存在了。