一、FastUnit平臺的分頁機制
使用2次查詢來實現分頁:
1. 獲取總記錄數
2. 利用Oracle的rownum獲取指定頁的數據
(根據上一步得到的總記錄數以及每頁行數、當前頁碼計算出起始行號和結束行號,設置在上述SQL語句的“?”處)
二、測試環境
操作系統:Windows XP Professional SP1
CPU:迅馳1.6G
物理內存:1G
應用服務器:Tomcat 5.5.23
數據庫:Oracle92(默認設置)
三、測試對象
FastUnit平臺的日誌表,腳本如下:
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毫秒。
(圖中的測試數據由FastUnit的跟蹤器統計的,用來跟蹤進程內各斷點之間時間消耗、數據庫連接數、查詢次數、增刪改次數、內存消耗等,可以直觀的判斷出系統瓶頸的位置,爲系統優化提供支持。)
五、對於大表的一般性優化措施
1. 表結構設計原則:數據類型儘量小(佔用空間少,磁盤讀入較快)、單獨設置表空間
2. 應用程序:合理設計業務、SQL語句優化
3. 合理使用索引:只創建需要的索引,根據需要使用多列索引,存放於單獨的表空間
4. 數據庫設置:內存分配、查詢優化器、分區、分表等
5. 硬件環境:硬盤、CPU、內存、網絡帶寬