在性能方面,存儲過(guò)程的
優(yōu)點(diǎn) :
1、預編譯,存儲過(guò)程預先編譯好放在數據庫內,減少編譯語(yǔ)句所花的時(shí)間。
2、緩存,編譯好的存儲過(guò)程會(huì )進(jìn)入緩存,所以對于經(jīng)常執行的存儲過(guò)程,除了第一次執行外,其他次執行的速度會(huì )有明顯提高。
3、減少網(wǎng)絡(luò )傳輸,特別對于處理一些數據的存儲過(guò)程,不必像直接用sql語(yǔ)句實(shí)現那樣多次傳送數據到客戶(hù)端。
4、更好的利用服務(wù)器內存,特別對于處理中間數據量不大的情況,存儲過(guò)程中可以利用存放在內存的表變量。
5.可維護性高,更新存儲過(guò)程通常比更改、測試以及重新部署程序集需要較少的時(shí)間和精力。
6.代碼精簡(jiǎn)一致,一個(gè)存儲過(guò)程可以用于應用程序代碼的不同位置。
7.更好的版本控制,通過(guò)使用 Microsoft Visual SourceSafe 或某個(gè)其他源代碼控制工具,您可以輕松地恢復到或引用舊 版本的存儲過(guò)程。
8.增強安全性:
a、通過(guò)向用戶(hù)授予對存儲過(guò)程(而不是基于表)的訪(fǎng)問(wèn)權限,它們可以提供對特定數據的訪(fǎng)問(wèn);
b、提高代碼安全,防止 SQL注入(但未徹底解決,例如,將數據操作語(yǔ)言--DML,附加到輸入參數);
c、SqlParameter 類(lèi)指定存儲過(guò)程參數的數據類(lèi)型,作為深層次防御性策略的一部分,可以驗證用戶(hù)提供的值類(lèi)型(但也不是萬(wàn)無(wú)一失,還是應該傳遞至數據庫前得到附加驗證)。
缺點(diǎn):
1.如果更改范圍大到需要對輸入存儲過(guò)程的參數進(jìn)行更改,或者要更改由其返回的數據,則您仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時(shí)候估計比較繁瑣了。
2.可移植性差
由于存儲過(guò)程將應用程序綁定到 SQL Server,因此使用存儲過(guò)程封裝業(yè)務(wù)邏輯將限制應用程序的可移植性。如果應用程序的可移植性在您的環(huán)境中非常重要,則將業(yè)務(wù)邏輯封裝在不特定于 RDBMS 的中間層中可能是一個(gè)更佳的選擇。
聯(lián)系客服