分析Web應用程序的性能需要利用一些手段來檢測每個操作的性能。為此,我創建了一個TimeDiff類(見程序清單1),它可以計算數據庫操作的用時。你可以利用TimeDiff類的檢測結果作為衡量數據庫操作性能的基準,來觀察哪些操作最為有效。我還創建了一個配合TimeDiff 類使用的LOTSOFRECORDS表(見程序清單2),它包含10,000條記錄,你可以通過對它的操作來觀察不同技術之間的性能差異。DB2具有內部緩沖池,一旦運行一個查詢,內部緩沖池啟用,因此二次查詢的速度較快。在檢測查詢速度時,請忽略緩沖池啟用前的結果而采用啟用后的結果。
程序清單1. TimeDiff類
|
程序清單2. LOTSOFRECORDS的表定義
|
規則一:按需檢索
如果你只能記得住一條規則,那一定要記住這一條:按需檢索。如果你是“幸存者”電視節目的忠實觀眾,您會記得其中的參賽者通過限額分配來保證每個人都有充足的食物。這種做法對于數據庫開發同樣適用。如果你的應用程序能夠按需運行,那么就會合理地將數據庫和網絡資源留給其他應用。這聽起來很簡單,但我們還是來看一個例子。
假設有一個包含10,000 行記錄和10 個字段的表,以及一個需要顯示所有記錄但只顯示3個字段的Web頁。很多開發者經常圖省事而使用"select *"語句選擇所有的字段:
|
這種做法應當避免,而應力求只檢索需要的字段。可以在SQL 語句中定義要檢索的字段,例如:
|
在本文附帶的源程序中,有兩個ASP.NET頁面:一個是RetrievingAllFields.aspx,它執行第一個查詢;另一個是RetrievingLimitedFields.aspx ,它執行第二個查詢,即只檢索需要的字段。
用TimeDiff類進行檢測,執行第一個查詢用了1.622 秒,執行第二個查詢用了1.311秒。后者用時只是前者的80%,不僅用時少,而且還減少了Web應用程序和數據庫服務器之間的網絡數據堵塞。
這個例子只限制了檢索的字段,你還可以使用WHERE語句限制檢索的記錄數。WHERE 語句可以限制服務器返回的記錄數(見程序清單3)。要記住,通過網絡發送的記錄數據越少,對應用程序、數據庫、用戶和網絡越有好處。
規則二:優化數據庫
有時候你的Web應用程序可能運行得不錯,但你想讓它更好。一個簡單的減少搜索時間的方法是為特定字段創建索引。如果有一個查詢是要搜索某個價格范圍內的產品(見程序清單3),但你沒有為價格字段定義索引,那么返回數據就會多花一些時間。而一旦建立了索引,DB2會很快返回你想要的結果。
程序清單3. 利用索引進行數據庫搜索
|
優化數據庫不只是為搜索字段創建索引這么一條,你應當盡可能多地搜集相關的DB2信息以使應用程序運行得更好。經常訪問IBM發者園地等一些相關的Web站點或新聞組,對于保持DB2開發技巧不斷更新是一個很好的辦法。
你還應當努力熟悉DB2附帶的工具,比如DB2索引建議器(Index Advisor)。DB2索引建議器可以根據你遞交的查詢和所連接的數據庫返回最佳索引列表。


