Java快速開發(fā)平臺

          www.fastunit.com

            BlogJava :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
            23 Posts :: 0 Stories :: 273 Comments :: 0 Trackbacks

          一、FastUnit平臺的分頁機(jī)制
          使用2次查詢來實(shí)現(xiàn)分頁:
          1. 獲取總記錄數(shù)

          select   count ( * from  T  where  

          2. 利用Oracle的rownum獲取指定頁的數(shù)據(jù)

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

          (根據(jù)上一步得到的總記錄數(shù)以及每頁行數(shù)、當(dāng)前頁碼計算出起始行號和結(jié)束行號,設(shè)置在上述SQL語句的“?”處)

          二、測試環(huán)境
          操作系統(tǒng):Windows XP Professional SP1
          CPU:迅馳1.6G
          物理內(nèi)存:1G
          應(yīng)用服務(wù)器:Tomcat 5.5.23
          數(shù)據(jù)庫:Oracle92(默認(rèn)設(shè)置)

          三、測試對象
          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);


          四、測試結(jié)果
          本案例中,數(shù)據(jù)庫除了索引未使用其他優(yōu)化措施。
          僅設(shè)置curtime條件時(使用索引),平均響應(yīng)時間為620毫秒(如下圖所示);
          對比:
          不設(shè)置任何條件時,平均響應(yīng)時間為2300毫秒;
          僅設(shè)置userid條件時(未使用索引),平均響應(yīng)時間為5100毫秒。
          page.png
          (圖中的測試數(shù)據(jù)由FastUnit的跟蹤器統(tǒng)計的,用來跟蹤進(jìn)程內(nèi)各斷點(diǎn)之間時間消耗、數(shù)據(jù)庫連接數(shù)、查詢次數(shù)、增刪改次數(shù)、內(nèi)存消耗等,可以直觀的判斷出系統(tǒng)瓶頸的位置,為系統(tǒng)優(yōu)化提供支持。)

          五、對于大表的一般性優(yōu)化措施
          1. 表結(jié)構(gòu)設(shè)計原則:數(shù)據(jù)類型盡量小(占用空間少,磁盤讀入較快)、單獨(dú)設(shè)置表空間
          2. 應(yīng)用程序:合理設(shè)計業(yè)務(wù)、SQL語句優(yōu)化
          3. 合理使用索引:只創(chuàng)建需要的索引,根據(jù)需要使用多列索引,存放于單獨(dú)的表空間
          4. 數(shù)據(jù)庫設(shè)置:內(nèi)存分配、查詢優(yōu)化器、分區(qū)、分表等
          5. 硬件環(huán)境:硬盤、CPU、內(nèi)存、網(wǎng)絡(luò)帶寬

          posted on 2008-01-16 14:21 FastUnit 閱讀(5999) 評論(7)  編輯  收藏 所屬分類: JavaDatabaseFastUnit

          Feedback

          # re: Oracle百萬數(shù)據(jù)的分頁查詢和測試案例 2008-01-16 15:14 cnodin
          用rownum分頁,如果取最后一頁,是不是把數(shù)據(jù)庫的所有數(shù)據(jù)先查出來,然后再取rownum?  回復(fù)  更多評論
            

          # re: Oracle百萬數(shù)據(jù)的分頁查詢和測試案例 2008-01-16 15:17 FastUnit
          rownum是Oracle的內(nèi)部處理機(jī)制,直接返回指定頁的數(shù)據(jù)記錄,在上述SQL的“?”處指定起始行號和結(jié)束行號即可。rownum是Oracle分頁的通用模式,Hibernate也是這樣處理的。  回復(fù)  更多評論
            

          # re: Oracle百萬數(shù)據(jù)的分頁查詢和測試案例 2008-01-17 09:14 Robin's Java World
          你這用的是什么測試工具呀?
            回復(fù)  更多評論
            

          # re: Oracle百萬數(shù)據(jù)的分頁查詢和測試案例 2008-01-17 11:30 wangdei
          你可以看看這個網(wǎng)站 http://www.yaonba.com 它也是百萬級的.  回復(fù)  更多評論
            

          # re: Oracle百萬數(shù)據(jù)的分頁查詢和測試案例 2008-01-17 14:57 FastUnit
          切圖中的測試數(shù)據(jù)是FastUnit內(nèi)部實(shí)現(xiàn)的跟蹤器,用來統(tǒng)計進(jìn)程內(nèi)各斷點(diǎn)之間的資源消耗。  回復(fù)  更多評論
            

          # re: Oracle百萬數(shù)據(jù)的分頁查詢和測試案例[未登錄] 2008-01-22 10:48 thinkthink
          現(xiàn)在很多人利用blog賣廣告了  回復(fù)  更多評論
            

          # re: Oracle百萬數(shù)據(jù)的分頁查詢和測試案例 2008-02-25 20:22 cayu
          這個分頁也太。。。  回復(fù)  更多評論
            

          主站蜘蛛池模板: 赤水市| 尼玛县| 廊坊市| 台江县| 泗洪县| 二手房| 泰来县| 湖南省| 桦南县| 通许县| 广河县| 颍上县| 临武县| 高安市| 蒙阴县| 枞阳县| 金寨县| 正镶白旗| 拉萨市| 安龙县| 云梦县| 浦江县| 阳城县| 盈江县| 来凤县| 晋中市| 金川县| 武夷山市| 天镇县| 酒泉市| 涞水县| 东方市| 克拉玛依市| 台东市| 怀远县| 方城县| 增城市| 德庆县| 宜州市| 晴隆县| 新津县|