一、FastUnit平臺的分頁機制
使用2次查詢來實現(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(默認設(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毫秒。

(圖中的測試數(shù)據(jù)由FastUnit的跟蹤器統(tǒng)計的,用來跟蹤進程內(nèi)各斷點之間時間消耗、數(shù)據(jù)庫連接數(shù)、查詢次數(shù)、增刪改次數(shù)、內(nèi)存消耗等,可以直觀的判斷出系統(tǒng)瓶頸的位置,為系統(tǒng)優(yōu)化提供支持。)
五、對于大表的一般性優(yōu)化措施
1. 表結(jié)構(gòu)設(shè)計原則:數(shù)據(jù)類型盡量小(占用空間少,磁盤讀入較快)、單獨設(shè)置表空間
2. 應(yīng)用程序:合理設(shè)計業(yè)務(wù)、SQL語句優(yōu)化
3. 合理使用索引:只創(chuàng)建需要的索引,根據(jù)需要使用多列索引,存放于單獨的表空間
4. 數(shù)據(jù)庫設(shè)置:內(nèi)存分配、查詢優(yōu)化器、分區(qū)、分表等
5. 硬件環(huán)境:硬盤、CPU、內(nèi)存、網(wǎng)絡(luò)帶寬