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、內存、網絡帶寬

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章