我有一个表里有超过500万的数据,我现在用分页查询语句查询时如果不排序速度很快,如果加上排序后速度慢的惊人,请各位帮帮小弟.用什么方法解决都行.我的分页查询语句如下:
select * from (select rownum id,loginfos.* from (select * from 表名order by f_time_log desc)loginfos where rownum <=20 ) where id >=10

解决方案 »

  1.   

    Select * from 表名 t where rowid in 
           (SELECT rid FROM 
                (SELECT T1.rowid rid, rownum as linenum FROM 
                     (SELECT a.rowid FROM 表名 a order by f_time_log desc) T1 
                                       WHERE rownum < 20
                                   ) WHERE linenum >= 10 
                                ) order by f_time_log desc;
      

  2.   

    to sasacat(傻傻猫) 
      首先谢谢你!
      你这句语句我试过了,大约需要40秒左右的时间,有没有更快一点的方法?
      

  3.   

    需要按f_time_log desc建立索引。
      

  4.   

    已经在f_time_log 字段上建立了索引的。
      

  5.   

    select /*+ first_row */*
        from TABLENAME
        where rowid in (select rid from (select rownum rno, rid
                                             from (select rowid rid from TABLENAME
                                                       order by f_time_log desc)
                                             where rownum <= 800000 )
                            where rno >= 799981)
        order by f_time_log desc;
      

  6.   

    可以换种思维方式,能不能在数据显示出来在排序呢?而不要用Oracle那样排序。在万不得已的情况下不要用in,多用一下inner join 等。
      

  7.   

    to shanbeiwa(说实话,我不会)
       你的想法根本行不通啊,你总不能让我把500多万的数据都读到内存中然后排序吧?
    to  bobfang(匆匆过客)
       /*+ first_row */*是什么意思呢?我没太明白!请解释!
      

  8.   

    这是告诉oracle按最快响应时间来优化执行SQL