Does Oracle fetch all the rows before evaluating rownum?

*爱你&永不变心* 提交于 2019-12-02 07:54:05

Run an explain plan on the query, and you'll find that you heard wrong -- Oracle will apply the rownum predicate as soon as a row is identified as part of the result set based on the rest of the query.

Using query hints is generally not recommended unless it is 101% sure that there is no other way to achieve the result (it is very important to remember the quote about premature optimization!!!), but for this purpose, there is a /*+ FIRST_ROWS(<integer>) */ hint that hints Oracle to optimize the execution plan for getting the first record as quick as possible.

select * /*+ FIRST_ROWS(1) */ from table1
where table1.column1 = 'somevalue' 
  AND table2.column2 = 'somevalue' 
  AND rownum = 1

Recommended reading:

Always remember: using hints is not always positive, the optimizer is pretty clever by itself... One can make queries much slower by applying hints than without. Also, if a hint works now, for example with the tables growing, it might hurt in the future... Also, hints are black magic, so unless you are a DBA, you should try to steer away from them, or at least seek help from a seasoned DBA. (Not in this quite straightforward case, but it might just help to rethink the query itself.)

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!