Java快速开发平台

www.fastunit.com

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  23 Posts :: 0 Stories :: 273 Comments :: 0 Trackbacks

一、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、内存、网络带宽

posted on 2008-01-16 14:21 FastUnit 阅读(5975) 评论(7)  编辑  收藏 所属分类: JavaDatabaseFastUnit

Feedback

# re: Oracle百万数据的分页查询和测试案例 2008-01-16 15:14 cnodin
用rownum分页,如果取最后一页,是不是把数据库的所有数据先查出来,然后再取rownum?  回复  更多评论
  

# re: Oracle百万数据的分页查询和测试案例 2008-01-16 15:17 FastUnit
rownum是Oracle的内部处理机制,直接返回指定页的数据记录,在上述SQL的“?”处指定起始行号和结束行号即可。rownum是Oracle分页的通用模式,Hibernate也是这样处理的。  回复  更多评论
  

# re: Oracle百万数据的分页查询和测试案例 2008-01-17 09:14 Robin's Java World
你这用的是什么测试工具呀?
  回复  更多评论
  

# re: Oracle百万数据的分页查询和测试案例 2008-01-17 11:30 wangdei
你可以看看这个网站 http://www.yaonba.com 它也是百万级的.  回复  更多评论
  

# re: Oracle百万数据的分页查询和测试案例 2008-01-17 14:57 FastUnit
切图中的测试数据是FastUnit内部实现的跟踪器,用来统计进程内各断点之间的资源消耗。  回复  更多评论
  

# re: Oracle百万数据的分页查询和测试案例[未登录] 2008-01-22 10:48 thinkthink
现在很多人利用blog卖广告了  回复  更多评论
  

# re: Oracle百万数据的分页查询和测试案例 2008-02-25 20:22 cayu
这个分页也太。。。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: