Oracle如何快速查找第N条记录?
比如,要查找第10000条记录,或是第100000条,怎么实现? 主键id可能不确定的条件下.

解决方案 »

  1.   

    select * from (select rownum hh,* from tableName) where hh=10000
      

  2.   


    rownum=10000或者rownum=100000可以吗?
      

  3.   

    没法快速?
    晕,上次面试时被问到了,俺就是说rownum,然后他就说,如果要查第10万行或是更后面呢?岂不是很慢?
    我当时就迷糊了!
      

  4.   

    有法。就是用rownum,关键看你怎么用。
    是先分页再回表,还是先回表再分页,这样查第100万条数据也不会太慢。
      

  5.   

    那具体怎么分页呢? 感觉用rownum实现分页也不能在忧能上有什么优化啊.
      

  6.   

    select object_name,object_type,owner from ( 
        select object_name,object_type,owner, rownum rn  from dba_objects where rownum < 10001 

    where rn >= 10000 ; 
      

  7.   

    Oracle 快速查找记录 rownum
      

  8.   

    不是说了吗?先分页,再回表。
    现在假设只查询第10W条记录,如果按楼上几位写的SQL,那么就不得不查询全部10W条记录,然后只返回一个值,即第10w行。这样效率当然低。
    而先分页,则是在索引上结合rownum和stopkey分页,快速定位第10w条记录,然后用rowid关联该行其他列,进行回表查询,这时就只查一条记录,然后返回这条记录。逻辑读将极大降低。具体SQL,我以前在论坛上回复过,你搜搜看。或者google下,这不是什么新问题了。