文章詳情頁(yè)
提高DB2 Web程序性能5條規(guī)則(1)
瀏覽:2日期:2023-11-10 19:41:37
速度和可升級(jí)性是網(wǎng)絡(luò)開(kāi)發(fā)重要的性能要求,而且它們也不難達(dá)到。應(yīng)用一些簡(jiǎn)單的規(guī)則會(huì)提高網(wǎng)絡(luò)應(yīng)用的性能。在本文中,您將了解到使用Borland® C#Builder和IBM® DB2®通用數(shù)據(jù)庫(kù)(UDB)8.1開(kāi)發(fā)快速M(fèi)icrosoft® ASP.NET Web應(yīng)用程序的5條規(guī)則。分析Web應(yīng)用程序的性能需要利用一些手段來(lái)檢測(cè)每個(gè)操作的性能。為此,我創(chuàng)建了一個(gè)TimeDiff類(lèi)(見(jiàn)程序清單1),它可以計(jì)算數(shù)據(jù)庫(kù)操作的用時(shí)。你可以利用TimeDiff類(lèi)的檢測(cè)結(jié)果作為衡量數(shù)據(jù)庫(kù)操作性能的基準(zhǔn),來(lái)觀察哪些操作最為有效。我還創(chuàng)建了一個(gè)配合TimeDiff 類(lèi)使用的LOTSOFRECORDS表(見(jiàn)程序清單2),它包含10,000條記錄,你可以通過(guò)對(duì)它的操作來(lái)觀察不同技術(shù)之間的性能差異。DB2具有內(nèi)部緩沖池,一旦運(yùn)行一個(gè)查詢(xún),內(nèi)部緩沖池啟用,因此二次查詢(xún)的速度較快。在檢測(cè)查詢(xún)速度時(shí),請(qǐng)忽略緩沖池啟用前的結(jié)果而采用啟用后的結(jié)果。程序清單1. TimeDiff類(lèi)using System;namespace Effeciency{ /// /// 這個(gè)類(lèi)用于時(shí)間計(jì)算。在例子中, /// 我們將利用它檢測(cè)數(shù)據(jù)庫(kù)操作的速度, /// 以便作性能上的比較。 ///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(); } }}} 123下一頁(yè) 程序清單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");下面,我們就開(kāi)始介紹這些提高DB2 UDB Web 應(yīng)用程序性能的規(guī)則。我會(huì)先介紹提高數(shù)據(jù)庫(kù)性能的基本規(guī)則,然后列出一些適合以Borland Data Provider開(kāi)發(fā)ASP.NET應(yīng)用時(shí)的性能規(guī)則。規(guī)則1:按需檢索假如你只能記得住一條規(guī)則,那一定要記住這一條:按需檢索。假如你是“幸存者電視節(jié)目的忠實(shí)觀眾,您會(huì)記得其中的參賽者通過(guò)限額分配來(lái)保證每個(gè)人都有充足的食物。這種做法對(duì)于數(shù)據(jù)庫(kù)開(kāi)發(fā)同樣適用。假如你的應(yīng)用程序能夠按需運(yùn)行,那么就會(huì)合理地將數(shù)據(jù)庫(kù)和網(wǎng)絡(luò)資源留給其他應(yīng)用。這聽(tīng)起來(lái)很簡(jiǎn)單,但我們還是來(lái)看一個(gè)例子。 上一頁(yè)123下一頁(yè) 假設(shè)有一個(gè)包含10,000 行記錄和10 個(gè)字段的表,以及一個(gè)需要顯示所有記錄但只顯示3個(gè)字段的Web頁(yè)。很多開(kāi)發(fā)者經(jīng)常圖省事而使用"select *"語(yǔ)句選擇所有的字段:select * from GLENN.LOTSOFRECORDS這種做法應(yīng)當(dāng)避免,而應(yīng)力求只檢索需要的字段。可以在SQL 語(yǔ)句中定義要檢索的字段,例如:selectKEYCOL, COL1, COL2, COL7fromGLENN.LOTSOFRECORDS在本文附帶的源程序中,有兩個(gè)ASP.NET頁(yè)面:一個(gè)是RetrievingAllFields.aspx,它執(zhí)行第一個(gè)查詢(xún);另一個(gè)是RetrievingLimitedFields.aspx ,它執(zhí)行第二個(gè)查詢(xún),即只檢索需要的字段。用TimeDiff類(lèi)進(jìn)行檢測(cè),執(zhí)行第一個(gè)查詢(xún)用了1.622 秒,執(zhí)行第二個(gè)查詢(xún)用了1.311秒。后者用時(shí)只是前者的80%,不僅用時(shí)少,而且還減少了Web應(yīng)用程序和數(shù)據(jù)庫(kù)服務(wù)器之間的網(wǎng)絡(luò)數(shù)據(jù)堵塞。這個(gè)例子只限制了檢索的字段,你還可以使用WHERE語(yǔ)句限制檢索的記錄數(shù)。WHERE 語(yǔ)句可以限制服務(wù)器返回的記錄數(shù)(見(jiàn)程序清單3)。要記住,通過(guò)網(wǎng)絡(luò)發(fā)送的記錄數(shù)據(jù)越少,對(duì)應(yīng)用程序、數(shù)據(jù)庫(kù)、用戶(hù)和網(wǎng)絡(luò)越有好處。規(guī)則2:優(yōu)化數(shù)據(jù)庫(kù)有時(shí)候你的Web應(yīng)用程序可能運(yùn)行得不錯(cuò),但你想讓它更好。一個(gè)簡(jiǎn)單的減少搜索時(shí)間的方法是為特定字段創(chuàng)建索引。假如有一個(gè)查詢(xún)是要搜索某個(gè)價(jià)格范圍內(nèi)的產(chǎn)品(見(jiàn)程序清單3),但你沒(méi)有為價(jià)格字段定義索引,那么返回?cái)?shù)據(jù)就會(huì)多花一些時(shí)間。而一旦建立了索引,DB2會(huì)很快返回你想要的結(jié)果。程序清單3. 利用索引進(jìn)行數(shù)據(jù)庫(kù)搜索SELECTPRODUCTCODE, PRODUCTNAME, DESCRIPTION, UNITPRICEFROMGLENN.PRODUCTLISTWHEREUNITPRICE > 20.00優(yōu)化數(shù)據(jù)庫(kù)不只是為搜索字段創(chuàng)建索引這么一條,你應(yīng)當(dāng)盡可能多地搜集相關(guān)的DB2信息以使應(yīng)用程序運(yùn)行得更好。經(jīng)常訪問(wèn)IBM發(fā)者園地(IBM DB2 Developer Domain)和comp.databases.ibm-db2(comp.databases.ibm-db2)等一些相關(guān)的Web站點(diǎn)或新聞組,對(duì)于保持DB2開(kāi)發(fā)技巧不斷更新是一個(gè)很好的辦法。你還應(yīng)當(dāng)努力熟悉DB2附帶的工具,例如DB2索引建議器(Index Advisor)。DB2索引建議器可以根據(jù)你遞交的查詢(xún)和所連接的數(shù)據(jù)庫(kù)返回最佳索引列表。 上一頁(yè)123
標(biāo)簽:
DB2
數(shù)據(jù)庫(kù)
排行榜
