Oracle百万数据的分页查询和测试案例

一、FastUnit平台的分页机制 
使用2次查询来实现分页:
1. 获取总记录数

  select     count  (  *  )   from   T   where   

2. 利用Oracle的rownum获取指定页的数据

  select     *     from   (   select   row_.  *  , rownum rownum_   from   (   SELECT     *     FROM   T   where   ) row_   where   rownum   <=  ?)   where   rownum_  >   ?

(根据上一步得到的总记录数以及每页行数、当前页码计算出起始行号和结束行号,设置在上述SQL语句的“?”处)

二、测试环境
操作系统:Windows XP Professional SP1
CPU:迅驰1.6G
物理内存:1G
应用服务器:Tomcat 5.5.23
数据库:Oracle92(默认设置)

三、测试对象 
FastUnit平台的日志表,脚本如下:

  CREATE     TABLE   ACCESSLOG(
    id                         NUMBER  (  10  ,  0  )   NOT     NULL  ,
    type                    NUMBER  (  1  ,  0  ),
    userid                VARCHAR2  (  50  ),
    username          VARCHAR2  (  50  ),
    org                      VARCHAR2  (  50  ),
    domain              VARCHAR2  (  50  ),
    groupid             VARCHAR2  (  50  ),
    groupname        VARCHAR2  (  50  ),
    unitid                VARCHAR2  (  50  ),
    unitname           VARCHAR2  (  50  ),
    elementid          VARCHAR2  (  50  ),
    elementname     VARCHAR2  (  50  ),
    cost                    NUMBER  (  5  ,  0  ),
    ok                      NUMBER  (  1  ,  0  ),
    curtime           DATE,
      PRIMARY     KEY   (id)
);
  CREATE     INDEX   AL_ct_idx   on   ACCESSLOG (curtime);


四、测试结果 
本案例中,数据库除了索引未使用其他优化措施。
仅设置curtime条件时(使用索引),平均响应时间为620毫秒(如下图所示);
对比:
不设置任何条件时,平均响应时间为2300毫秒;
仅设置userid条件时(未使用索引),平均响应时间为5100毫秒。
page.png
(图中的测试数据由FastUnit的跟踪器统计的,用来跟踪进程内各断点之间时间消耗、数据库连接数、查询次数、增删改次数、内存消耗等,可以直观的判断出系统瓶颈的位置,为系统优化提供支持。)

五、对于大表的一般性优化措施
1. 表结构设计原则:数据类型尽量小(占用空间少,磁盘读入较快)、单独设置表空间
2. 应用程序:合理设计业务、SQL语句优化
3. 合理使用索引:只创建需要的索引,根据需要使用多列索引,存放于单独的表空间
4. 数据库设置:内存分配、查询优化器、分区、分表等
5. 硬件环境:硬盘、CPU、内存、网络带宽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值