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

客戶端提升SQL Server數據庫性能

申請免費試用、咨詢電話:400-8352-114

文章來源:泛普軟件

第一:編寫限制搜索范圍的查詢語句。

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

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

如可以在在客戶端設置默認的條件語句。如在ERP系統(tǒng)中,有個采購定單的表單;在后臺數據庫中,就對應著采購定單這么一張表。默認在查詢采購定單的時候,查詢到的是未結帳的采購定單。如此的話,即使用戶在查詢采購單時,沒有輸入采購定單號或者定單日期等限制條件,客戶端在向服務器遞交查詢語句的時候,會默認把限制條件語句加入進去。如此,對于提高數據庫首次查詢的效率是非常有幫助的。

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

總之,在客戶端適當的加入限制搜索范圍的查詢語句,是在客戶端提高數據庫服務器性能的一個首選的方法。

第二:盡量不要采用復雜的存儲過程。

SQL Server數據庫雖然提供了很強的存儲過程功能,但是,在前臺應用程序設計的時候,最好不要頻繁的去調用數據庫的存儲過程。這主要是因為存儲過程雖然方便,但是其執(zhí)行速度沒有普通的應用程序,如C語言那么快。

而從功能上看,很多存儲過程可以完成的功能,前臺應用程序完全可以實現。如在一些進銷存管理系統(tǒng)中,往往需要把小寫金額轉換成大寫金額,在采購定單上打印出來。這個功能即可以通過數據庫的存儲過程實現,也可以通過前臺的應用程序實現。但是,根據筆者的觀察,發(fā)現數據庫的存儲功能的性能不是很理想。若存儲過程稍微比較復雜的話,如參數比較多時,客戶端的響應時間就會比較慢。相反,如果不是在數據庫后臺實現這個功能,而是直接在前臺利用應用程序實現的話,則其速度就會快許多。

另外,若在后臺數據庫中建立存儲過程的話,會增加服務器的工作量。設想一下,現在采購部門有十個員工,若在一個時段內,都在維護采購定單的話,則就要同時調用這個存儲過程,那么對于服務器的資源就會“爭用”。相反,若在客戶端實現這個功能的話,因為其都是在客戶端上執(zhí)行,所以服務器資源大家就不用你爭我奪了。

所以,筆者在數據庫設計的時候,很少采用存儲過程。能夠利用客戶端應用程序實現的,就采用前臺應用程序實現。真的要采用存儲過程的話,也要采用那些減少爭用和增加并發(fā)性的存儲過程。

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

我們都知道,數據庫在設計的時候,也用到了緩存。緩存是操作系統(tǒng)內存中間的一個模塊。因為從內存中讀取數據要比在硬盤中讀取數據要快的多,所以,在數據庫中通過把擁護查詢過的數據記入到緩存中去,從而可以服務器的性能。

現在有些程序開發(fā)人員更進一步。在客戶端應用程序上,也可以假如緩存??蛻舳说木彺娓掌鞫说木彺嬗挟惽ぶ睢.斈硞€用戶查詢了采購定單價格變更記錄的時候,即使用戶關掉了表,則其查詢的數據仍然會在一定時間內保存在客戶端的緩存中。當用戶下次需要這方面數據的時候,則客戶端就不會直接從數據庫服務器從查詢,而是先從客戶端的緩存中找起。只有客戶端應用軟件的緩存中沒有這方面信息的時候,才會把語句反饋給服務器,從服務器中提取數據。通過這種方式,就可以在客戶端上分擔服務器的壓力,改善SQL Server數據庫的性能。

不過,若在客戶端設置了高速緩存的話,則最好在應用軟件上,增加清除高速緩存的按紐。因為在默寫情況下,我們可能想要知道即使更改的結果,而不是最后一個看到。如我們在服務器上,改變了某個金額。但是,由于在客戶端上剛查詢過這方面的數據,數據內容還在緩存中。則仍然顯示的是哪個未改過之前的情況。此時,就需要通過“清除高速緩存”的方法來及時的看到改變后的內容。

第四:在前臺實現表的完整性約束。

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

其實,我們若通過前臺的客戶端應用程序來實現表的完整性約束,可能對數據庫的性能更加的有利。如在前臺的客戶端界面中,有某個字段不能為空。此時,我們就可以在前臺應用程序開發(fā)的時候,加一限制,當這個字段為空的時候,不能保存。在前臺客戶端都不能夠保存的數據,則當然不會傳遞給后臺的數據庫服務器。通過這種在前臺實現表的完整性約束,就可以減少這個處理的過程??梢员U蟼鬟f給后臺數據庫的內容都是符合完整性約束的。

另外,就拿默認值來說,也是在客戶端應用程序中實現來的便捷。如筆者在數據庫開發(fā)的時候,需要有一個記錄創(chuàng)建與更新日期。這兩個字段的話,就可以在為其創(chuàng)建默認日期。現在的問題就是是在前臺客戶端程序實現呢,還是在后臺的數據庫中實現限制呢?筆者比較傾向與前臺。因為在前臺,客戶端直接會把當前的默認值傳遞給服務器,服務器直接保存即可。而不用觸發(fā)服務器的默認日期的存儲過程。

總之,筆者認為,我們在考慮改善數據庫性能的時候,需要客戶端與服務器端一起努力?;蛟S通過這種方式,可以給我們一些意外的收獲。使用過后,大家可能都會由衷的發(fā)表感嘆,認同筆者的做法。(IT專家網)

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

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

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

咨詢:400-8352-114

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

QQ在線咨詢

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

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