每次点“next”都要查一次当然慢
可以考虑先把“
SELECT A.*, ROWNUM RN 
FROM (SELECT * FROM TABLE_NAME) A 
WHERE ...”
的结果放进一个中间表
以后都对这个表操作就会快很多

解决方案 »

  1.   

    如果放入中间表的话,
    SELECT A.*, ROWNUM RN 
    FROM (SELECT * FROM TABLE_NAME) A 
    WHERE ...”
    查出的记录也很多怎么办?比如 如果查出100w条,是不是同样每次next都会同样慢??还有好像如果查出的结果少于10w的话,即使点击“last”
    也不会很慢,
      

  2.   

    1、尽量不要查询所有的列;
    select col1,col2,col3,... from tablename
    2、别做那么多嵌套;
    select col1,col2,col3,... from tablename where rownum between 20 and 41;
    3、管理好索引。
      

  3.   

    to feng2:
    1.rownum 不能用between,只能用<
    2.楼主方法是对的。
      

  4.   

    看看Google的分页,Google做不到的楼主就省省心吧
      

  5.   

    一般来说子查询返回rowid的方式要更快一些。基本框架如下:
    select a.* from table_name a 
    where rowid in (
           select rid from (
                select rowid as rid,rownum as rn from table_name
                where ...
                and rownum<&ceil_number)
           where rn>&floor_number);
      

  6.   

    楼主买本《oralce数据库性能优化》的书,里面有针对web分页的优化
      

  7.   

    1000多W的数据,我想,除非是SB,没有人会看那么多的数据去吧!
      

  8.   

    感谢各位回帖,我也知道1000多w的数据分页不是很合理,我们做的是一般的mis系统,一开始也没有想到,客户会有这么多的数据,所以在开发的时候,就才用了传统的交互界面,有"上页","下页","尾页"什么的,可是最近客户不知道那个筋不对,一下弄了这么多的数据,现在有些不止所错,我也和客户沟通过,他们也认可我的思路,就是把"尾页"去了,可是这样又要改我们的程序,总觉得心有不干,难道oracle连1000w的数据都高不定?,不知道银行了,什么的他们系统怎么做的,感谢各位,我在等等,过两天结贴!
      

  9.   

    楼主试一下这个吧:  db.executeQuery("select * from (select * from (select rownum record_id,a.* from 表名 a) b ) c where rownum <= "+rowsPerPage+" and c.record_id > "+(curPage-1)*rowsPerPage);