DB2
速度和可升級性是網絡開發重要的性能要求,而且它們也不難達到。應用一些簡單的規則會提高網絡應用的性能。在本文中,您將了解到使用Borland® C#Builder和IBM® DB2®通用數據庫(UDB)8.1開發快速Microsoft® ASP.NET Web應用程序的5條規則。
分析Web應用程序的性能需要利用一些手段來檢測每個操作的性能。為此,我創建了一個TimeDiff類(見程序清單1),它可以計算數據庫操作的用時。你可以利用TimeDiff類的檢測結果作為衡量數據庫操作性能的基准,來觀察哪些操作最為有效。我還創建了一個配合TimeDiff 類使用的LOTSOFRECORDS表(見程序清單2),它包含10,000條記錄,你可以通過對它的操作來觀察不同技術之間的性能差異。DB2具有內部緩沖池,一旦運行一個查詢,內部緩沖池啟用,因此二次查詢的速度較快。在檢測查詢速度時,請忽略緩沖池啟用前的結果而采用啟用後的結果。
程序清單1. TimeDiff類
using System;
namespace Effeciency
{
///
/// 這個類用於時間計算。在例子中,
/// 我們將利用它檢測數據庫操作的速度,
/// 以便作性能上的比較。
///
public class TimeDiff
{
DateTime StartTime;
DateTime EndTime;
public TimeDiff() {}
public void Start()
{
StartTime = DateTime.Now;
}
public void Stop()
{
EndTime = DateTime.Now;
}
public string TimeDifferenceText
{
get
{
TimeSpan TimeDifference = EndTime - StartTime;
return TimeDifference.ToString();
}
}
}
}
程序清單2. LOTSOFRECORDS的表定義
CREATE TABLE "GLENN "."LOTSOFRECORDS" (
"KEYCOL" INTEGER NOT NULL ,
"COL1" CHAR(50) ,
"COL2" CHAR(50) ,
"COL3" CHAR(50) ,
"COL4" CHAR(50) ,
"COL5" CHAR(50) ,
"COL6" CHAR(50) ,
"COL7" CHAR(50) ,
"COL8" CHAR(50) ,
"COL9" CHAR(50) ,
"COL10" CHAR(50) )
IN "USERSPACE1" ;
COMMENT ON TABLE "GLENN "."LOTSOFRECORDS" IS 'Table designed to Contain Lots of Records';
-- DDL Statements for primary key on Table "GLENN "."LOTSOFRECORDS"
ALTER TABLE "GLENN "."LOTSOFRECORDS"
ADD CONSTRAINT "CC1058255334652" PRIMARY KEY
("KEYCOL");
下面,我們就開始介紹這些提高DB2 UDB Web 應用程序性能的規則。我會先介紹提高數據庫性能的基本規則,然後列出一些適合以Borland Data Provider開發ASP.NET應用時的性能規則。
規則1:按需檢索
如果你只能記得住一條規則,那一定要記住這一條:按需檢索。如果你是“幸存者”電視節目的忠實觀眾,您會記得其中的參賽者通過限額分配來保證每個人都有充足的食物。這種做法對於數據庫開發同樣適用。如果你的應用程序能夠按需運行,那麼就會合理地將數據庫和網絡資源留給其他應用。這聽起來很簡單,但我們還是來看一個例子。
假設有一個包含10,000 行記錄和10 個字段的表,以及一個需要顯示所有記錄但只顯示3個字段的Web頁。很多開發者經常圖省事而使用"select *"語句選擇所有的字段:
select * from GLENN.LOTSOFRECORDS
這種做法應當避免,而應力求只檢索需要的字段。可以在SQL 語句中定義要檢索的字段,例如:
select
KEYCOL, COL1, COL2, COL7
from
GLENN.LOTSOFRECORDS
在本文附帶的源程序中,有兩個ASP.NET頁面:一個是RetrievingAllFields.aspx,它執行第一個查詢;另一個是RetrievingLimitedFields.aspx ,它執行第二個查詢,即只檢索需要的字段。
用TimeDiff類進行檢測,執行第一個查詢用了1.622 秒,執行第二個查詢用了1.311秒。後者用時只是前者的80%,不僅用時少,而且還減少了Web應用程序和數據庫服務器之間的網絡數據堵塞。
這個例子只限制了檢索的字段,你還可以使用WHERE語句限制檢索的記錄數。WHERE 語句可以限制服務器返回的記錄數(見程序清單3)。要記住,通過網絡發送的記錄數據越少,對應用程序、數據庫、用戶和網絡越有好處。
規則2:優化數據庫
有時候你的Web應用程序可能運行得不錯,但你想讓它更好。一個簡單的減少搜索時間的方法是為特定字段創建索引。如果有一個查詢是要搜索某個價格范圍內的產品(見程序清單3),但你沒有為價格字段定義索引,那麼返回數據就會多花一些時間。而一旦建立了索引,DB2會很快返回你想要的結果。
程序清單3. 利用索引進行數據庫搜索
SELECT
PRODUCTCODE, PRODUCTNAME, DESCRIPTION, UNITPRICE
FROM
GLENN.PRODUCTLIST
WHERE
UNITPRICE > 20.00
優化數據庫不只是為搜索字段創建索引這麼一條,你應當盡可能多地搜集相關的DB2信息以使應用程序運行得更好。經常訪問IBM發者園地(IBM DB2 Developer Domain)和comp.databases.ibm-db2(comp.databases.ibm-db2)等一些相關的Web站點或新聞組,對於保持DB2開發技巧不斷更新是一個很好的辦法。
你還應當努力熟悉DB2附帶的工具,例如DB2索引建議器(Index Advisor)。DB2索引建議器可以根據你遞交的查詢和所連接的數據庫返回最佳索引列表。