存儲過程的優(yōu)缺點_第1頁
存儲過程的優(yōu)缺點_第2頁
全文預覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、存儲過程的優(yōu)缺點為什么要存儲過程個去 IBM試的兄弟回來抱怨:去了好個不同的IBM項組,乎每個試官問到數(shù)據(jù)庫的時候都要問沒過存儲過程,煩不?家去的程序員,不是DBA,以前的項都沒有到存儲,不照樣運的好好的?存儲過程真的那么重要嗎,它到底有什么好處呢?筆者認為,存儲過程說了就是堆SQL的合并。中間加了點邏輯控制。但是存儲過程處理較復雜的業(yè)務時較實。如說,個復雜的數(shù)據(jù)操作。如果你在前臺處理的話??赡軙婕暗蕉啻螖?shù)據(jù)庫連接。但如果你存儲過程的話。就只有次。從響應時間上來說有優(yōu)勢。也就是說存儲過程可以給我們帶來運效率提的好處。另外,程序容易出現(xiàn)BUG不穩(wěn)定,存儲過程,只要數(shù)據(jù)庫不出現(xiàn)問題,基本上是不會

2、出現(xiàn)什么問題的。也就是說從安全上講,使了存儲過程的系統(tǒng)更加穩(wěn)定。數(shù)據(jù)量的,或者和錢沒關(guān)系的項不存儲過程也可以正常運作。mysql的存儲過程還有待實際測試。如果是正式項,建議你sqlserver或 oracle的存儲過程。數(shù)據(jù)與數(shù)據(jù)之間打交道的話,過程會程序來的快的多。試官問有沒有存儲,實際上就是想知道前來試的程序員到底做過數(shù)據(jù)量的項沒。如果是培訓出來的,或者項公司出來的,對存儲肯定接觸的少了。所以,要想進公司,沒有豐富存儲過程經(jīng)驗,是不的。那么什么時候才可以存儲?對于數(shù)據(jù)量不是很以及業(yè)務處理不是很復雜的項就需要了么?錯。存儲過程不僅僅適于型項,對于中型項,使存儲過程也是常有必要的。其威和優(yōu)勢主

3、要體現(xiàn)在:1.存儲過程只在創(chuàng)造時進編譯,以后每次執(zhí)存儲過程都不需再重新編譯,般SQL語句每執(zhí)次就編譯次所以使存儲過程可提數(shù)據(jù)庫執(zhí)速度。2.當對數(shù)據(jù)庫進復雜操作時如對多個表進Update,Insert,Query,Delete時),可將此復雜操作存儲過程封裝起來與數(shù)據(jù)庫提供的事務處理結(jié)合起使。這些操作,如果程序來完成,就變成了條條的SQL語句,可能要多次連接數(shù)據(jù)庫。換成存儲,只需要連接次數(shù)據(jù)庫就可以了。3.存儲過程可以重復使可減少數(shù)據(jù)庫開發(fā)員的作量。4.安全性可設(shè)定只有某此戶才具有對指定存儲過程的使權(quán)。存儲過程的使,好像直是個爭論。我不傾向于盡可能使存儲過程,是這么認為的:1. 運速度: 多數(shù)級

4、的數(shù)據(jù)庫系統(tǒng)都有statement cache的,所以編譯sql的花費沒什么影響。但是執(zhí)存儲過程要直接執(zhí)sql花費更多(檢查權(quán)限等),所以對于很簡單的sql,存儲過程沒有什么優(yōu)勢。2. 絡負荷:如果在存儲過程中沒有多次數(shù)據(jù)交互,那么實際上絡傳輸量和直接sql是樣的。3. 團隊開發(fā):很遺憾,起成熟的IDE,沒有什么很好存儲過程的IDE具來持,也就是說,這些必須完成。4. 安全機制:對于傳統(tǒng)的C/S結(jié)構(gòu),連接數(shù)據(jù)庫的戶可以不同,所以安全機制有;但是在web的三層架構(gòu)中,數(shù)據(jù)庫戶不是給戶的,所以基本上,只有個戶,擁有所有權(quán)限(最多還有個開發(fā)戶)。這個時候,安全機制有點多余。5. 戶滿意:實際上這個只

5、是要將訪問數(shù)據(jù)庫的接統(tǒng),是存儲過程,還是EJB,沒太關(guān)系,也就是說,在三層結(jié)構(gòu)中,單獨設(shè)計出個數(shù)據(jù)訪問層,同樣能實現(xiàn)這個標。6. 開發(fā)調(diào)試:樣由于IDE的問題,存儲過程的開發(fā)調(diào)試要般程序困難(版本DB2還只能C寫存儲過程,更是個災難)。7. 移植性:算了,這個不提,反正般的應總是綁定某個數(shù)據(jù)庫的,不然就法靠優(yōu)化數(shù)據(jù)庫訪問來提性能了。8. 維護性:的確,存儲過程有些時候程序容易維護,這是因為可以實時更新DB端的存儲過程,但是在3層結(jié)構(gòu)下,更新server端的數(shù)據(jù)訪問層樣能實現(xiàn)這個標,可惜現(xiàn)在很多平臺不持實時更新已。從上可知道,存儲過程的使不能有死規(guī)定(全,或全不),以前Terminal - Se

6、rver, Client-DB的式已經(jīng)過時了,存儲過程很多優(yōu)勢已經(jīng)不明顯?,F(xiàn)在,我認為的原則是:所有數(shù)據(jù)訪問在應層封裝為數(shù)據(jù)訪問層,在那,如果SQL簡單的話,直接SQL;如果SQL復雜,或者數(shù)據(jù)交互多且中間數(shù)據(jù)最后不會到,使存儲過程。其他憑經(jīng)驗吧。存儲過程是由些SQL語句和控制語句組成的被封裝起來的過程,它駐留在數(shù)據(jù)庫中,可以被客戶應程序調(diào),也可以從另個過程或觸發(fā)器調(diào)。它的參數(shù)可以被傳遞和返回。與應程序中的函數(shù)過程類似,存儲過程可以通過名字來調(diào),且它們同樣有輸參數(shù)和輸出參數(shù)。根據(jù)返回值類型的不同,我們可以將存儲過程分為三類:返回記錄集的存儲過程,返回數(shù)值的存儲過程(也可以稱為標量存儲過程),以

7、及為存儲過程。顧名思義,返回記錄集的存儲過程的執(zhí)結(jié)果是個記錄集,典型的例是從數(shù)據(jù)庫中檢索出符合某個或個條件的記錄;返回數(shù)值的存儲過程執(zhí)完以后返回個值,例如在數(shù)據(jù)返回記錄集的存儲過程的執(zhí)結(jié)果是個記錄集,典型的例是從數(shù)據(jù)庫中檢索出符合某個或個條件的記錄;返回數(shù)值的存儲過程執(zhí)完以后返回個值,例如在數(shù)據(jù)庫中執(zhí)個有返回值的函數(shù)或命令;最后,為存儲過程僅僅是來實現(xiàn)數(shù)據(jù)庫的某個功能,沒有返回值,例如在數(shù)據(jù)庫中的更新和刪除操作。使存儲過程的好處相對于直接使SQL語句,在應程序中直接調(diào)存儲過程有以下好處:減少絡通信量。調(diào)個數(shù)不多的存儲過程與直接調(diào)SQL語句的絡通信量可能不會有很的差別,可是如果存儲過程包含上百S

8、QL語句,那么其性能絕對條條的調(diào)SQL語句要得多。執(zhí)速度更快。有兩個原因:先,在存儲過程創(chuàng)建的時候,數(shù)據(jù)庫已經(jīng)對其進了次解析和優(yōu)化。其次,存儲過程旦執(zhí),在內(nèi)存中就會保留份這個存儲過程,這樣下次再執(zhí)同樣的存儲過程時,可以從內(nèi)存中直接調(diào)。更強的適應性:由于存儲過程對數(shù)據(jù)庫的訪問是通過存儲過程來進的,因此數(shù)據(jù)庫開發(fā)員可以在不改動存儲過程接的情況下對數(shù)據(jù)庫進任何改動,這些改動不會對應程序造成影響。(4)布式作:應程序和數(shù)據(jù)庫的編碼作可以分別獨進,不會相互壓制。優(yōu)點:1.由于應程序隨著時間推移會不斷更改,增刪功能,TSQL過程代碼會變得更復雜,StoredProcedure為封裝此代碼提供了個替換位置。

9、2.執(zhí)計劃(存儲過程在次運時將被編譯,這將產(chǎn)個執(zhí)計劃實際上是 Microsoft SQL Server為在存儲過程中獲取由T-SQL 指定的結(jié)果必須采取的步驟的記錄。)緩存改善性能。.但sql server新版本,執(zhí)計劃已針對所有T-SQL 批處理進了緩存,不管它們是否在存儲過程中,所以沒較優(yōu)勢了。3.存儲過程可以于降低絡流量,存儲過程代碼直接存儲于數(shù)據(jù)庫中,所以不會產(chǎn)量T-sql語句的代碼流量。4.使存儲過程使您能夠增強對執(zhí)計劃的重復使,由此可以通過使遠程過程調(diào)(RPC)處理服務器上的存儲過程提性能。RPC 封裝參數(shù)和調(diào)服務器端過程的式使引擎能夠輕松地找到匹配的執(zhí)計劃,并只需插更新的參數(shù)值。

10、5.可維護性,更新存儲過程通常更改、測試以及重新部署程序集需要較少的時間和精。6.代碼精簡致,個存儲過程可以于應程序代碼的不同位置。7.更好的版本控制,通過使Microsoft Visual SourceSafe 或某個其他源代碼控制具,您可以輕松地恢復到或引舊版本的存儲過程。8.增強安全性:、通過向戶授予對存儲過程(不是基于表)的訪問權(quán)限,它們可以提供對特定數(shù)據(jù)的訪問;、提代碼安全,防SQL注(但未徹底解決,例如,將數(shù)據(jù)操作語DML,附加到輸參數(shù));c、SqlParameter 類指定存儲過程參數(shù)的數(shù)據(jù)類型,作為深層次防御性策略的部分,可以驗證戶提供的值類型(但也不是萬失,還是應該傳遞數(shù)據(jù)庫前得到附加驗證)。缺點:1.如果更改范圍到需要對輸存儲過程的參數(shù)進更改,或者要更改由其返回的數(shù)據(jù),則您仍需要更新程序集中的代碼以添加參數(shù)、更新GetValue() 調(diào),等等,這時候估計較繁瑣了。2.可移植性差由于存儲過程將應程序綁定到SQL Server,因此使存儲過程封裝業(yè)務邏輯將限制應程序的可移植性。如果應程序的可移植性在您的環(huán)境中常重要,則將業(yè)務邏輯封裝在不特定于RDBMS 的中間層中可能是個更佳的選擇。區(qū)別,存儲過程保存

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論