監(jiān)理公司管理系統(tǒng) | 工程企業(yè)管理系統(tǒng) | OA系統(tǒng) | ERP系統(tǒng) | 造價(jià)咨詢管理系統(tǒng) | 工程設(shè)計(jì)管理系統(tǒng) | 簽約案例 | 購(gòu)買價(jià)格 | 在線試用 | 手機(jī)APP | 產(chǎn)品資料
X 關(guān)閉

客戶端提升SQL Server數(shù)據(jù)庫(kù)性能

申請(qǐng)免費(fèi)試用、咨詢電話:400-8352-114

文章來(lái)源:泛普軟件

第一:編寫(xiě)限制搜索范圍的查詢語(yǔ)句。

眾所周知,在數(shù)據(jù)庫(kù)查詢的時(shí)候返回記錄的多少直接關(guān)系到查詢的效率。所以,在客戶端通過(guò)一定的條件語(yǔ)句,限制搜索的范圍,往往可以大幅度的提高查詢的效率。

如用戶在客戶端查詢數(shù)據(jù)庫(kù)的時(shí)候,在查詢語(yǔ)句中,加入TOP語(yǔ)句,讓其顯示前面的50條或者100條記錄。因?yàn)楦鶕?jù)經(jīng)驗(yàn),用戶在查詢數(shù)據(jù)的時(shí)候,60%左右要查看的都是靠前面的記錄。特別是在一些歷史交易信息表中,如在erp系統(tǒng)的庫(kù)存交易表中,就可以只顯示前面幾百條的記錄,而不需要顯示所有的記錄。當(dāng)用戶覺(jué)得記錄不夠時(shí),可以按“全部”,然后客戶端再去服務(wù)器查詢所有的結(jié)果。這種設(shè)計(jì)的話,就可以非常有效的提高數(shù)據(jù)庫(kù)的查詢性能。

如可以在在客戶端設(shè)置默認(rèn)的條件語(yǔ)句。如在ERP系統(tǒng)中,有個(gè)采購(gòu)定單的表單;在后臺(tái)數(shù)據(jù)庫(kù)中,就對(duì)應(yīng)著采購(gòu)定單這么一張表。默認(rèn)在查詢采購(gòu)定單的時(shí)候,查詢到的是未結(jié)帳的采購(gòu)定單。如此的話,即使用戶在查詢采購(gòu)單時(shí),沒(méi)有輸入采購(gòu)定單號(hào)或者定單日期等限制條件,客戶端在向服務(wù)器遞交查詢語(yǔ)句的時(shí)候,會(huì)默認(rèn)把限制條件語(yǔ)句加入進(jìn)去。如此,對(duì)于提高數(shù)據(jù)庫(kù)首次查詢的效率是非常有幫助的。

當(dāng)然,無(wú)論是利用TOP語(yǔ)句,還是利用Where語(yǔ)句設(shè)置默認(rèn)的限制條件,都不是隨便設(shè)置的。這往往需要根據(jù)客戶的使用習(xí)慣與表單的性質(zhì),來(lái)進(jìn)行確定。如對(duì)于客戶信息表,其客戶本來(lái)數(shù)量也不多,所以,就沒(méi)有必要設(shè)置限制搜索范圍的查詢語(yǔ)句。但是對(duì)于庫(kù)存交易明細(xì)表,一個(gè)月下來(lái),就有可能有成千上完條記錄。如此海量的數(shù)據(jù),若不設(shè)置限制條件的話,則查詢起來(lái),用戶等待的時(shí)間會(huì)比較長(zhǎng)。所以,針對(duì)這種情況,我們默認(rèn)可以其只顯示前面500條記錄或者只顯示最近30天之內(nèi)的交易信息。

總之,在客戶端適當(dāng)?shù)募尤胂拗扑阉鞣秶牟樵冋Z(yǔ)句,是在客戶端提高數(shù)據(jù)庫(kù)服務(wù)器性能的一個(gè)首選的方法。

第二:盡量不要采用復(fù)雜的存儲(chǔ)過(guò)程。

SQL Server數(shù)據(jù)庫(kù)雖然提供了很強(qiáng)的存儲(chǔ)過(guò)程功能,但是,在前臺(tái)應(yīng)用程序設(shè)計(jì)的時(shí)候,最好不要頻繁的去調(diào)用數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程。這主要是因?yàn)榇鎯?chǔ)過(guò)程雖然方便,但是其執(zhí)行速度沒(méi)有普通的應(yīng)用程序,如C語(yǔ)言那么快。

而從功能上看,很多存儲(chǔ)過(guò)程可以完成的功能,前臺(tái)應(yīng)用程序完全可以實(shí)現(xiàn)。如在一些進(jìn)銷存管理系統(tǒng)中,往往需要把小寫(xiě)金額轉(zhuǎn)換成大寫(xiě)金額,在采購(gòu)定單上打印出來(lái)。這個(gè)功能即可以通過(guò)數(shù)據(jù)庫(kù)的存儲(chǔ)過(guò)程實(shí)現(xiàn),也可以通過(guò)前臺(tái)的應(yīng)用程序?qū)崿F(xiàn)。但是,根據(jù)筆者的觀察,發(fā)現(xiàn)數(shù)據(jù)庫(kù)的存儲(chǔ)功能的性能不是很理想。若存儲(chǔ)過(guò)程稍微比較復(fù)雜的話,如參數(shù)比較多時(shí),客戶端的響應(yīng)時(shí)間就會(huì)比較慢。相反,如果不是在數(shù)據(jù)庫(kù)后臺(tái)實(shí)現(xiàn)這個(gè)功能,而是直接在前臺(tái)利用應(yīng)用程序?qū)崿F(xiàn)的話,則其速度就會(huì)快許多。

另外,若在后臺(tái)數(shù)據(jù)庫(kù)中建立存儲(chǔ)過(guò)程的話,會(huì)增加服務(wù)器的工作量。設(shè)想一下,現(xiàn)在采購(gòu)部門(mén)有十個(gè)員工,若在一個(gè)時(shí)段內(nèi),都在維護(hù)采購(gòu)定單的話,則就要同時(shí)調(diào)用這個(gè)存儲(chǔ)過(guò)程,那么對(duì)于服務(wù)器的資源就會(huì)“爭(zhēng)用”。相反,若在客戶端實(shí)現(xiàn)這個(gè)功能的話,因?yàn)槠涠际窃诳蛻舳松蠄?zhí)行,所以服務(wù)器資源大家就不用你爭(zhēng)我?jiàn)Z了。

所以,筆者在數(shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候,很少采用存儲(chǔ)過(guò)程。能夠利用客戶端應(yīng)用程序?qū)崿F(xiàn)的,就采用前臺(tái)應(yīng)用程序?qū)崿F(xiàn)。真的要采用存儲(chǔ)過(guò)程的話,也要采用那些減少爭(zhēng)用和增加并發(fā)性的存儲(chǔ)過(guò)程。

第三:在客戶端采用高速緩存提高服務(wù)器性能。

我們都知道,數(shù)據(jù)庫(kù)在設(shè)計(jì)的時(shí)候,也用到了緩存。緩存是操作系統(tǒng)內(nèi)存中間的一個(gè)模塊。因?yàn)閺膬?nèi)存中讀取數(shù)據(jù)要比在硬盤(pán)中讀取數(shù)據(jù)要快的多,所以,在數(shù)據(jù)庫(kù)中通過(guò)把擁護(hù)查詢過(guò)的數(shù)據(jù)記入到緩存中去,從而可以服務(wù)器的性能。

現(xiàn)在有些程序開(kāi)發(fā)人員更進(jìn)一步。在客戶端應(yīng)用程序上,也可以假如緩存??蛻舳说木彺娓?wù)器端的緩存有異曲同工之妙。當(dāng)某個(gè)用戶查詢了采購(gòu)定單價(jià)格變更記錄的時(shí)候,即使用戶關(guān)掉了表,則其查詢的數(shù)據(jù)仍然會(huì)在一定時(shí)間內(nèi)保存在客戶端的緩存中。當(dāng)用戶下次需要這方面數(shù)據(jù)的時(shí)候,則客戶端就不會(huì)直接從數(shù)據(jù)庫(kù)服務(wù)器從查詢,而是先從客戶端的緩存中找起。只有客戶端應(yīng)用軟件的緩存中沒(méi)有這方面信息的時(shí)候,才會(huì)把語(yǔ)句反饋給服務(wù)器,從服務(wù)器中提取數(shù)據(jù)。通過(guò)這種方式,就可以在客戶端上分擔(dān)服務(wù)器的壓力,改善SQL Server數(shù)據(jù)庫(kù)的性能。

不過(guò),若在客戶端設(shè)置了高速緩存的話,則最好在應(yīng)用軟件上,增加清除高速緩存的按紐。因?yàn)樵谀瑢?xiě)情況下,我們可能想要知道即使更改的結(jié)果,而不是最后一個(gè)看到。如我們?cè)诜?wù)器上,改變了某個(gè)金額。但是,由于在客戶端上剛查詢過(guò)這方面的數(shù)據(jù),數(shù)據(jù)內(nèi)容還在緩存中。則仍然顯示的是哪個(gè)未改過(guò)之前的情況。此時(shí),就需要通過(guò)“清除高速緩存”的方法來(lái)及時(shí)的看到改變后的內(nèi)容。

第四:在前臺(tái)實(shí)現(xiàn)表的完整性約束。

如果在后臺(tái)數(shù)據(jù)庫(kù)實(shí)現(xiàn)表的完整性約束,如某個(gè)字段不能為空的話,則需要經(jīng)過(guò)很多個(gè)步驟。如客戶端程序先把結(jié)果傳遞給表;然后在存儲(chǔ)的時(shí)候,發(fā)現(xiàn)某個(gè)字段為空,不符合表的完整性約束的要求;數(shù)據(jù)庫(kù)拒絕保存這條記錄,并返回錯(cuò)誤信息;數(shù)據(jù)庫(kù)服務(wù)器把這個(gè)結(jié)果傳遞給客戶端。很顯然,這種處理機(jī)制比較麻煩。那么有沒(méi)有什么簡(jiǎn)單的解決方法呢?

其實(shí),我們?nèi)敉ㄟ^(guò)前臺(tái)的客戶端應(yīng)用程序來(lái)實(shí)現(xiàn)表的完整性約束,可能對(duì)數(shù)據(jù)庫(kù)的性能更加的有利。如在前臺(tái)的客戶端界面中,有某個(gè)字段不能為空。此時(shí),我們就可以在前臺(tái)應(yīng)用程序開(kāi)發(fā)的時(shí)候,加一限制,當(dāng)這個(gè)字段為空的時(shí)候,不能保存。在前臺(tái)客戶端都不能夠保存的數(shù)據(jù),則當(dāng)然不會(huì)傳遞給后臺(tái)的數(shù)據(jù)庫(kù)服務(wù)器。通過(guò)這種在前臺(tái)實(shí)現(xiàn)表的完整性約束,就可以減少這個(gè)處理的過(guò)程??梢员U蟼鬟f給后臺(tái)數(shù)據(jù)庫(kù)的內(nèi)容都是符合完整性約束的。

另外,就拿默認(rèn)值來(lái)說(shuō),也是在客戶端應(yīng)用程序中實(shí)現(xiàn)來(lái)的便捷。如筆者在數(shù)據(jù)庫(kù)開(kāi)發(fā)的時(shí)候,需要有一個(gè)記錄創(chuàng)建與更新日期。這兩個(gè)字段的話,就可以在為其創(chuàng)建默認(rèn)日期。現(xiàn)在的問(wèn)題就是是在前臺(tái)客戶端程序?qū)崿F(xiàn)呢,還是在后臺(tái)的數(shù)據(jù)庫(kù)中實(shí)現(xiàn)限制呢?筆者比較傾向與前臺(tái)。因?yàn)樵谇芭_(tái),客戶端直接會(huì)把當(dāng)前的默認(rèn)值傳遞給服務(wù)器,服務(wù)器直接保存即可。而不用觸發(fā)服務(wù)器的默認(rèn)日期的存儲(chǔ)過(guò)程。

總之,筆者認(rèn)為,我們?cè)诳紤]改善數(shù)據(jù)庫(kù)性能的時(shí)候,需要客戶端與服務(wù)器端一起努力?;蛟S通過(guò)這種方式,可以給我們一些意外的收獲。使用過(guò)后,大家可能都會(huì)由衷的發(fā)表感嘆,認(rèn)同筆者的做法。(IT專家網(wǎng))

發(fā)布:2007-04-21 13:54    編輯:泛普軟件 · xiaona    [打印此頁(yè)]    [關(guān)閉]
相關(guān)文章:
哈爾濱OA系統(tǒng)
聯(lián)系方式

成都公司:成都市成華區(qū)建設(shè)南路160號(hào)1層9號(hào)

重慶公司:重慶市江北區(qū)紅旗河溝華創(chuàng)商務(wù)大廈18樓

咨詢:400-8352-114

加微信,免費(fèi)獲取試用系統(tǒng)

QQ在線咨詢

泛普哈爾濱OA軟件行業(yè)資訊其他應(yīng)用

哈爾濱OA軟件 哈爾濱OA新聞動(dòng)態(tài) 哈爾濱OA管理信息化 哈爾濱OA快博 哈爾濱OA軟件行業(yè)資訊 哈爾濱軟件開(kāi)發(fā)公司 哈爾濱門(mén)禁系統(tǒng) 哈爾濱物業(yè)管理軟件 哈爾濱倉(cāng)庫(kù)管理軟件 哈爾濱餐飲管理軟件 哈爾濱網(wǎng)站建設(shè)公司