爲什麼會出現存儲過程?存儲過程到底有什麼用?

原文:存儲過程到底有什麼用? - 虎哥的回答 - 知乎 https://www.zhihu.com/question/21345483/answer/656171236


存儲過程到底有什麼用?

最近有個朋友在研究存儲過程的事兒。看着他在那裏糾結,突然想問下存儲過程到底有用麼?

bing了一下,在一些解釋中:
1、存儲過程集合了sql語句並且緩存,大大提高語言執行效率
2、增加安全性
3、保證原子性

對這些東西有些疑問:
1、據說現在sql語句也會進行緩存,是否提高效率,提高多少效率還真不好說
2、安全性爲什麼要寫在數據庫裏面,不是應該在程序裏面就保證好了麼
3、原子性的東西也可以在程序裏面實現,爲什麼不?

總之,感覺存儲過程就是把數據庫訪問的邏輯與程序分離而放在數據庫上,這到底是爲了什麼


我覺得凡事不盲從、都問問爲什麼挺好的,要向你學習。

感覺bing出來的三條都不是存儲過程被使用的主要原因。主要原因應該是大量數據計算的時候,把數據從數據庫中搬出來、計算好再存回去,時間太漫長了。搬出來、存回去的時間要遠遠大於計算的時間。

但是,大量數據計算的情況,一般只會發生在數據批量處理的場景,也就是每天晚上算好了,存入結果表,第二天上班用來查詢。

回過頭來看你bing的三條。事實上,少量數據的增刪改查,用java實現挺好的,安全性和原子性可以通過MVC分層來保證。請中高級程序員負責後臺,保證數據處理的代碼質量,一般也不會出什麼亂子。至於java提交SQL給數據庫,需要解析的時間成本,這是數據庫的強項,不會成爲瓶頸。而且java也提供PreparedStatement的預編譯緩存機制,所以沒問題的。

你最後說的,存儲過程“把數據庫訪問的邏輯與程序分離而放在數據庫上”這其實不是什麼好事,1、數據庫壓力太大,會成爲性能瓶頸,擴容太昂貴;2、移植到其他數據庫會非常困難;3、開發人員有數據庫高權限,數據安全受影響。



作者:虎哥
鏈接:https://www.zhihu.com/question/21345483/answer/656171236
來源:知乎
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章