分页查询格式:
SELECT * FROM 
(
SELECT A.*, ROWNUM RN 
FROM (SELECT * FROM TABLE_NAME) A 
WHERE ROWNUM <= 40
)
WHERE RN >= 21请问如果我的查询结果集是超大数据量  百万数据  多表关联查询,
并且是多用户并发操作,
这样将会频繁的访问数据库
那这种分页实现方法还是否可行?
会不会急剧增加oracle server的压力?
如果真是如此,有什么解决方案吗?应该如何进行优化?三四个用户同时查询时 web应用服务器 cup 80% ,多了就会当机~~~请问 有什么解决方案吗?

解决方案 »

  1.   

    强制增加查询条件,避免full table scan。
      

  2.   

    有where条件的,三四个条件。
      

  3.   

    SELECT *
      FROM (SELECT A.*, ROWNUM RN
              FROM TABLE_NAME A
             WHERE ROWNUM <=40)
     WHERE RN > 21
      

  4.   

    select   /*+FIRST_ROWS*/   *   from   t     
      where   rowid   in     
      (   select   rid   from     
      (   select   rownum   rno,rid   from     
      (   select   rowid   rid   from   t     
      where   category   =   20     
      order   by   category,product_name     
      )   where   rownum   <=   5000     
      )   where   rno   >=   4981     
      )
      

  5.   

    实际测了一下 200万条数据 取第1999900到2000000的数据
    基本上速度在5。3秒左右
    /*+FIRST_ROWS*/  提示基本上不起作用``
     ORACLE会自动帮你选择最优查询方式
    而且基本上也是最优的
     
    SQL上基本上优化不到多少了 如果并发量很大的话要考虑在硬件和程序上调优
    比如缓存之内的东东
      

  6.   


    优化不仅仅是技术上的事情,有时需求上和设计上要有优化的概念,等一个执行很慢的sql,在最后才发现送到了dba面前的时候,由于已经奄奄一息的病人送到了外科医生面前,留下的是选择越来越少的治疗方案了。
      

  7.   

    最好先analyze表,然后在用/*+FIRST_ROWS*/ ,可能效率会好点