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. 表結構設計原則:數據類型盡量?。ㄕ加每臻g少,磁盤讀入較快)、單獨設置表空間
          2. 應用程序:合理設計業務、SQL語句優化
          3. 合理使用索引:只創建需要的索引,根據需要使用多列索引,存放于單獨的表空間
          4. 數據庫設置:內存分配、查詢優化器、分區、分表等
          5. 硬件環境:硬盤、CPU、內存、網絡帶寬

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

          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
          這個分頁也太。。。  回復  更多評論
            

          主站蜘蛛池模板: 突泉县| 大港区| 佛冈县| 阳高县| 五家渠市| 姚安县| 海林市| 夹江县| 海伦市| 海口市| 丹凤县| 华宁县| 台南市| 望江县| 炎陵县| 仙桃市| 安塞县| 名山县| 沾益县| 祁东县| 宾阳县| 云龙县| 祁阳县| 大安市| 兰坪| 泸西县| 泰兴市| 靖宇县| 临泽县| 通城县| 宽甸| 竹山县| 静宁县| 巩义市| 鄂温| 武陟县| 射洪县| 清苑县| 安阳县| 大化| 漠河县|