一、什么情況下才應(yīng)該使用存儲過程而不是用程序來對數(shù)據(jù)做操作
1.如果處理的邏輯不是太復(fù)雜,也就是邏輯的時間復(fù)雜度不高,可以放進存儲過程,因為如果太復(fù)雜(例如有很多巨耗CPU資源的操作),會加大數(shù)據(jù)庫服務(wù)器的壓力,從而影響數(shù)據(jù)庫服務(wù)器對其它請求的響應(yīng)。而本應(yīng)以運行程序邏輯為本職的應(yīng)用服務(wù)器,卻晾在一旁打醬油,你認為這樣真的好嗎?
2.相反,如果邏輯不太復(fù)雜,但是需要訪問的數(shù)據(jù)量是巨量的,那么就更適合放進存儲過程處理(注意處理好表鎖定的問題),因為當你讀取上千萬條件數(shù)據(jù)并把它們傳進應(yīng)用服務(wù)器再來處理除了對教據(jù)庫服務(wù)器有壓力,對應(yīng)用外理哭的內(nèi)存壓力也很大的,倒不如直接在數(shù)據(jù)庫服務(wù)器外理完它。這種情況時,盡管在讀取大數(shù)據(jù)量時,其實無論用哪種方法,數(shù)據(jù)庫服務(wù)器的磁盤IO承受的玉力都是一樣的,但如果放在代碼里處理,也就是需要傳到應(yīng)用服務(wù)器端處理,那么就會對網(wǎng)絡(luò)IC也形成了壓力。如果這種操作頻繁的話,會對網(wǎng)絡(luò)IC也形成了壓力。如果這種操作頻繁的話,會對網(wǎng)絡(luò)10形成壓力脈沖。有可能影響同一網(wǎng)絡(luò)上的其它應(yīng)用。
延伸閱讀:
二、中小型項目使用存儲過程的優(yōu)勢
存儲過程不僅僅適用于大型項目,對于中小型項目,使用存儲過程也是非常有必要的。其威力和優(yōu)勢主要體現(xiàn)在:
1.存儲過程只在創(chuàng)造時進行編譯,以后每次執(zhí)行存儲過程都不需再重新編譯,而一般 SQL 語句每執(zhí)行一次就編譯一次,所以使用存儲過程可提高數(shù)據(jù)庫執(zhí)行速度。
2.當對數(shù)據(jù)庫進行復(fù)雜操作時(如對多個表進行 Update,Insert,Query,Delete 時),可將此復(fù)雜操作用存儲過程封裝起來與數(shù)據(jù)庫提供的事務(wù)處理結(jié)合一起使用。這些操作,如果用程序來完成,就變成了一條條的 SQL 語句,可能要多次連接數(shù)據(jù)庫。而換成存儲,只需要連接一次數(shù)據(jù)庫就可以了。
3.存儲過程可以重復(fù)使用,可減少數(shù)據(jù)庫開發(fā)人員的工作量。
4.安全性高,可設(shè)定只有某此用戶才具有對指定存儲過程的使用權(quán)。