存儲(chǔ)過(guò)程優(yōu)缺點(diǎn)分析
存儲(chǔ)過(guò)程的優(yōu)缺點(diǎn):
存儲(chǔ)過(guò)程優(yōu)點(diǎn):
1.由于應(yīng)用程序隨著時(shí)間推移會(huì)不斷更改,增刪功能,T-SQL過(guò)程代碼會(huì)變得更復(fù)雜,StoredProcedure為封裝此代碼提供了一個(gè)替換位置。
2.執(zhí)行計(jì)劃(存儲(chǔ)過(guò)程在首次運(yùn)行時(shí)將被編譯,這將產(chǎn)生一個(gè)執(zhí)行計(jì)劃-- 實(shí)際上是 Microsoft SQL Server為在存儲(chǔ)過(guò)程中獲取由 T-SQL 指定的結(jié)果而必須采取的步驟的記錄。)緩存改善性能。
但sql server新版本,執(zhí)行計(jì)劃已針對(duì)所有 T-SQL 批處理進(jìn)行了緩存,而不管它們是否在存儲(chǔ)過(guò)程中,所以沒(méi)比較優(yōu)勢(shì)了。
3.存儲(chǔ)過(guò)程可以用于降低網(wǎng)絡(luò)流量,存儲(chǔ)過(guò)程代碼直接存儲(chǔ)于數(shù)據(jù)庫(kù)中,所以不會(huì)產(chǎn)生大量T-sql語(yǔ)句的代碼流量。
4.使用存儲(chǔ)過(guò)程使您能夠增強(qiáng)對(duì)執(zhí)行計(jì)劃的重復(fù)使用,由此可以通過(guò)使用遠(yuǎn)程過(guò)程調(diào)用 (RPC) 處理服務(wù)器上的存儲(chǔ)過(guò)程而提高性能。RPC 封裝參數(shù)和調(diào)用服務(wù)器端過(guò)程的方式使引擎能夠輕松地找到匹配的執(zhí)行計(jì)劃,并只需插入更新的參數(shù)值。
5.可維護(hù)性高,更新存儲(chǔ)過(guò)程通常比更改、測(cè)試以及重新部署程序集需要較少的時(shí)間和精力。
6.代碼精簡(jiǎn)一致,一個(gè)存儲(chǔ)過(guò)程可以用于應(yīng)用程序代碼的不同位置。
7.更好的版本控制,通過(guò)使用 Microsoft Visual SourceSafe 或某個(gè)其他源代碼控制工具,您可以輕松地恢復(fù)到或引用舊版本的存儲(chǔ)過(guò)程。
8.增強(qiáng)安全性:
a、通過(guò)向用戶授予對(duì)存儲(chǔ)過(guò)程(而不是基于表)的訪問(wèn)權(quán)限,它們可以提供對(duì)特定數(shù)據(jù)的訪問(wèn);
b、提高代碼安全,防止 SQL注入(但未徹底解決,例如,將數(shù)據(jù)操作語(yǔ)言--DML,附加到輸入?yún)?shù));
c、SqlParameter 類指定存儲(chǔ)過(guò)程參數(shù)的數(shù)據(jù)類型,作為深層次防御性策略的一部分,可以驗(yàn)證用戶提供的值類型(但也不是萬(wàn)無(wú)一失,還是應(yīng)該傳遞至數(shù)據(jù)庫(kù)前得到附加驗(yàn)證)。
存儲(chǔ)過(guò)程缺點(diǎn):
1.如果更改范圍大到需要對(duì)輸入存儲(chǔ)過(guò)程的參數(shù)進(jìn)行更改,或者要更改由其返回的數(shù)據(jù),則您仍需要更新程序集中的代碼以添加參數(shù)、更新 GetValue() 調(diào)用,等等,這時(shí)候估計(jì)比較繁瑣了。
2.可移植性差
由于存儲(chǔ)過(guò)程將應(yīng)用程序綁定到 SQL Server,因此使用存儲(chǔ)過(guò)程封裝業(yè)務(wù)邏輯將限制應(yīng)用程序的可移植性。如果應(yīng)用程序的可移植性在您的環(huán)境中非常重要,則將業(yè)務(wù)邏輯封裝在不特定于 RDBMS 的中間層中可能是一個(gè)更佳的選擇。
3. 大量采用存儲(chǔ)過(guò)程進(jìn)行業(yè)務(wù)邏輯的開(kāi)發(fā)致命的缺點(diǎn)是很多存儲(chǔ)過(guò)程不支持面向?qū)ο蟮脑O(shè)計(jì),無(wú)法采用面向?qū)ο蟮姆绞綄I(yè)務(wù)邏輯進(jìn)行封裝,從而無(wú)法形成通用的可支持復(fù)用的業(yè)務(wù)邏輯框架。
4.代碼可讀性差,相當(dāng)難維護(hù).
相關(guān)文章
數(shù)據(jù)轉(zhuǎn)換沖突及轉(zhuǎn)換過(guò)程中大對(duì)象的處理
數(shù)據(jù)轉(zhuǎn)換沖突及轉(zhuǎn)換過(guò)程中大對(duì)象的處理方法,大家可以參考下。2009-07-07Sql語(yǔ)句與存儲(chǔ)過(guò)程查詢數(shù)據(jù)的性能測(cè)試實(shí)現(xiàn)代碼
Sql語(yǔ)句 存儲(chǔ)過(guò)程查 性能測(cè)試對(duì)比代碼。2009-04-04sqlserver 中ntext字段的批量替換(updatetext的用法)
在Sql Server 中,ntext/text/image 字段不允許應(yīng)用replace函數(shù)替換內(nèi)容2009-09-09SQLServer2005 按照日期自動(dòng)備份的方法
SQLServer2005如何備份,按照日期自動(dòng)備份2010-07-07sql update 觸發(fā)器 可獲得被update的行的信息
sql update 觸發(fā)器 可獲得被update的行的信息,需要的朋友可以參考下。2010-06-06SQL Server數(shù)據(jù)庫(kù)設(shè)置自動(dòng)備份策略的完整步驟
這篇文章主要給大家介紹了關(guān)于SQL Server數(shù)據(jù)庫(kù)設(shè)置自動(dòng)備份策略的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用sql server具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09SQL Server 2016的數(shù)據(jù)庫(kù)范圍內(nèi)的配置詳解
這篇文章主要介紹了SQL Server 2016的數(shù)據(jù)庫(kù)范圍內(nèi)的配置詳解的相關(guān)資料,需要的朋友可以參考下2016-03-03SQL Server中的SQL語(yǔ)句優(yōu)化與效率問(wèn)題
這篇文章主要介紹了SQL Server中的SQL語(yǔ)句優(yōu)化與效率問(wèn)題的相關(guān)資料,需要的朋友可以參考下2014-07-07