存儲過程的優(yōu)缺點及適宜使用的場合詳解
我們知道,存儲過程在數(shù)據(jù)庫操作中的使用是非常廣泛的。它具有速度快、程序簡單、可重復(fù)使用、安全性高等特點,那么什么時候使用存儲過程是比較適合的呢?本文我們就來介紹這一部分內(nèi)容,希望能夠?qū)ψx者有所幫助。
當(dāng)一個事務(wù)涉及到多個SQL語句時或者涉及到對多個表的操作時就要考慮用存儲過程;當(dāng)在一個事務(wù)的完成需要很復(fù)雜的商業(yè)邏輯時(比如,對多個數(shù)據(jù)的操作,對多個狀態(tài)的判斷更改等)要考慮;還有就是比較復(fù)雜的統(tǒng)計和匯總也要考慮,但是過多的使用存儲過程會降低系統(tǒng)的移植性。
為了系統(tǒng)的控制方便,例如當(dāng)系統(tǒng)進(jìn)行調(diào)整時,這是只需要將后臺存儲過程進(jìn)行更改,而不需要更改客戶端程序。也無需重新安裝客戶端應(yīng)用程序。
存儲過程不僅僅適用于大型項目,對于中小型項目,使用存儲過程也是非常有必要的。
存儲過程的威力和優(yōu)勢:
1.存儲過程只在創(chuàng)造時進(jìn)行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般SQL 語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。
2.當(dāng)對數(shù)據(jù)庫進(jìn)行復(fù)雜操作時(如對多個表進(jìn)行Update,Insert,Query,Delete 時),可將此復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。這些操作,如果用程序來完成,就變成了一條條的SQL語句,可能要多次連接數(shù)據(jù)庫。而換成存儲,只需要連接一次數(shù)據(jù)庫就可以了。
3.存儲過程可以重復(fù)使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量。
4.安全性高,可設(shè)定只有某此用戶才具有對指定存儲過程的使用權(quán)。
存儲過程的優(yōu)點:
1.速度快。尤其對于較為復(fù)雜的邏輯,減少了網(wǎng)絡(luò)流量之間的消耗。
如果有的過程和函數(shù)達(dá)到了幾百行,一個微型編譯器,相信用程序就更麻煩了。
2.寫程序簡單,采用存儲過程調(diào)用類,調(diào)用任何存儲過程都只要1-2行代碼。
3.升級、維護(hù)方便。
4.調(diào)試其實也并不麻煩,可以用查詢分析器。
5.如果把所有的數(shù)據(jù)邏輯都放在存儲過程中,那么asp.net只需要負(fù)責(zé)界面的顯示功能,出錯的可能性最大就是在存儲過程。一般情況下就是這樣。
存儲過程的缺點:
1.可移植性差,我一直采用sql server開發(fā),可是如果想賣自己的東西,發(fā)現(xiàn)自己簡直就是在幫ms賣東西,呵呵。想換成mysql,確實移植麻煩。
2.采用存儲過程調(diào)用類,需要進(jìn)行兩次調(diào)用操作,一次是從sql server中取到過程的參數(shù)信息,并且建立參數(shù);第二次才是調(diào)用這個過程。多了一次消耗。
不過這個缺點可以在項目開發(fā)完成,過程參數(shù)完全確定之后,把所有過程參數(shù)信息倒入到一個xml文件中來提高性能。
當(dāng)一個業(yè)務(wù)同時對多個表進(jìn)行處理的時候采用存儲過程比較合適。
- 使用存儲過程在一般情況下會提高性能,因為數(shù)據(jù)庫優(yōu)化了存儲過程的數(shù)據(jù)訪問計劃并應(yīng)用緩存方便以后的查詢;
- 存儲過程單獨保護(hù)存在于數(shù)據(jù)庫中。客戶端可以獲取權(quán)限執(zhí)行存儲過程,而不需要對底層的具體表設(shè)置其他的訪問權(quán)限;
- 存儲過程會使得維護(hù)起來更加方便,因為通常修改一個存儲過程要比在一個已經(jīng)發(fā)布的組件中修改SQL語句更加方便;
- 存儲過程給底層數(shù)據(jù)格式增添了額外的抽象層。使得使用存儲過程的客戶端對存儲過程的實現(xiàn)細(xì)節(jié)以及對底層數(shù)據(jù)格式是隔離獨立的;
- 存儲過程能夠緩解網(wǎng)絡(luò)帶寬,因為可以批量執(zhí)行SQL語句而不是從客戶端發(fā)送超負(fù)載的請求。
復(fù)雜的數(shù)據(jù)處理用存儲過程,如有些報表處理。
多條件多表聯(lián)合查詢,并做分頁處理,用存儲過程也比較適合。
適當(dāng)?shù)氖褂么鎯^程,能夠提高我們SQL查詢的性能,以便于提高我們的工作效率。本文就介紹這么多了,希望本次的介紹能夠?qū)δ兴斋@!
【編輯推薦】






