比如 
select a.* 
  from (select rownum r, 
              * 
          from test 
         where 1 = 1 
         order by username desc) a 
 where a.r between 0 and 10 这样执行起来就要1分钟左右  实际上的数据大约1000多条 username是主键 
select rownum r, 
              * 
          from test 
         where 1 = 1 
         order by username desc 这样一下子就执行完毕 

解决方案 »

  1.   


    select a.*  
    from (select rownum r,  
                 t.*  
            from test t
           where 1 = 1  
           order by username desc) a  
    where a.r <11 
      

  2.   

    一般不建议用*,还是把需要选的字段一一写出来。可以监控一下SQL,看看时间主要花在那里,另外,表的高水位线是否异常(要不直接alter table table_name move一下)
      

  3.   

    你一个查询语句就能完成的事情,干嘛得用个子查询呢?
    select rownum r,  
                 t.*  
            from test t
           where 1 = 1  
           order by username desc ;
    我测试了一下,就像你说的1000多条数据,速度也是很快的噢;
      

  4.   

    少了个rownum<11的条件。 
      

  5.   

    不好意思描述不清楚,下面这样
    select a.*  
    from (select rownum r,  
                 t.*  
            from test t
           where 1 = 1  
           order by username desc) a  
    where a.r <11 
    速度可以。但 select a.*  
    from (select rownum r,  
                 t.*  
            from test t
           where 1 = 1  
           order by username desc) a  
    where rownum < 11 
    就很慢了。而且
    select rownum r,  
                 t.*  
            from test t
           where 1 = 1  
           order by username desc
    是很快的。由于我们使用了公司的框架,只需要提供 select rownum r,  
                 t.*  
            from test t
           where 1 = 1  
           order by username desc
    语句,分页是框架实现,所以没法改。但分页语句从执行计划来看都很好。,该分页语句切换另一个数据库环境就OK ,这个是否同数据库设置有关。