亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

使用存儲過程是否值得?

您好,我看阿里規范里建議棄用存儲過程,然后面試的時候也說了存儲過程過時了,所以想請教下過時的原因,這里使用存儲過程所得到的優化和產生的壞處相對比來說是否值得?

正在回答

2 回答

優點:

1.存儲過程只在創造時進行編譯,以后每次執行存儲過程都不需再重新編譯,而一般 SQL 語句每執行一次就編譯一次,所以使用存儲過程可提高數據庫執行速度。
? 2.當對數據庫進行復雜操作時(如對多個表進行 Update,Insert,Query,Delete 時),可將此復雜操作用存儲過程封裝起來與數據庫提供的事務處理結合一起使用。這些操作,如果用程序來完成,就變成了一條條的 SQL 語句,可能要多次連接數據庫。而換成存儲,只需要連接一次數據庫就可以了。
? 3.存儲過程可以重復使用,可減少數據庫開發人員的工作量。
? 4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權。

缺點:

1.?? 運行速度:?? 大多數高級的數據庫系統都有statement?? cache的,所以編譯sql的花費沒什么影響。但是執行存儲過程要比直接執行sql花費更多(檢查權限等),所以對于很簡單的sql,存儲過程沒有什么優勢。?????
? 2.?? 網絡負荷:如果在存儲過程中沒有多次數據交互,那么實際上網絡傳輸量和直接sql是一樣的。?????
? 3.?? 團隊開發:很遺憾,比起成熟的IDE,沒有什么很好存儲過程的IDE工具來支持,也就是說,這些必須手工完成。?????
? 4.?? 安全機制:對于傳統的C/S結構,連接數據庫的用戶可以不同,所以安全機制有用;但是在web的三層架構中,數據庫用戶不是給用戶用的,所以基本上,只有一個用戶,擁有所有權限(最多還有一個開發用戶)。這個時候,安全機制有點多余。?????
? 5.?? 用戶滿意:實際上這個只是要將訪問數據庫的接口統一,是用存儲過程,還是EJB,沒太大關系,也就是說,在三層結構中,單獨設計出一個數據訪問層,同樣能實現這個目標。?????
? 6.?? 開發調試:一樣由于IDE的問題,存儲過程的開發調試要比一般程序困難(老版本DB2還只能用C寫存儲過程,更是一個災難)。?????
? 7.?? 移植性:算了,這個不用提,反正一般的應用總是綁定某個數據庫的,不然就無法靠優化數據庫訪問來提高性能了。?????
? 8.?? 維護性:的確,存儲過程有些時候比程序容易維護,這是因為可以實時更新DB端的存儲過程,但是在3層結構下,更新server端的數據訪問層一樣能實現這個目標,可惜現在很多平臺不支持實時更新而已。?


4 回復 有任何疑惑可以回復我~
#1

慕絲9183733 提問者

那感覺就是除非特別情況,一般沒必要用存儲過程了吧,第一條現在基本都應用緩存,第二條,數據庫連接池使用只是喚醒連接消耗也不大吧
2018-06-24 回復 有任何疑惑可以回復我~
#2

qq_童年_1

牛逼了,大佬
2019-02-24 回復 有任何疑惑可以回復我~

存儲過程還是不行啊,我做壓力測試的時候,500個商品,用500個線程去搶,一半左右的線程會出現錯誤,不用存儲過程,只有20個左右的線程會出現錯誤。而且響應速度也特別慢。不過redis緩存和行級鎖優化是確實非常厲害,我用了學校實驗室的兩臺臺式機進行部署和測試,mysql,redis,tomcat集中在一臺機器上,另一臺跑jmeter測試,同樣是500個線程500個商品,優化前跑完需要13s,優化后跑完需要7s,最大tps也提升了一倍

0 回復 有任何疑惑可以回復我~
#1

尋鹿

您好,請問測試的時候怎么模擬多個手機號去搶呢?
2018-09-11 回復 有任何疑惑可以回復我~
#2

qq_人戲不分_0

不會出現超賣的情況嗎?
2019-03-31 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

使用存儲過程是否值得?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號