背景
百度百科對存儲過程的定義
存儲過程(Stored Procedure)是在大型數據庫系統中,一組為了完成特定功能的SQL 語句集,它存儲在數據庫中,一次編譯后永久有效,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。存儲過程是數據庫中的一個重要對象。在數據量特別龐大的情況下利用存儲過程能達到倍速的效率提升;
爭論
那么關於開發當中是否使用存儲過程,一直以來都有很多爭論;
在《阿里巴巴java編碼規范》有這樣一條
互聯網人看法
關於這個,我個人在互聯網行業是贊同的;
首先,確實很難調試,如果把大量的業務寫在存儲過程,那么調試閱讀起來是
很痛苦的,試想一下,在幾百行的sql 里面 ,你要一個個去理解它的意思;
有時候,你需要逐行去驗證對錯;再者你要增加功能 ,只能在繼續往上面堆sql,最后造成惡性循環;
至於移植,在不同的數據庫有些機制還是略有不同的,還是需要改sql;
所以在互聯網行業,一般是不提倡使用存儲過程的;
那么有人會問存儲過程執行效率高啊,確實如此,但是為了那么一點點性能
犧牲開發效率和維護性就得不償失;況且效率性能的重點根本不在那么一點點損耗;就像有人覺得原生的sql 效率高,拒絕orm 是一樣的;沒有注意到事情的本質;因噎廢食;
事有兩面性
當然,事情有兩面性,有些行業,比如傳統的管理類系統,由於需求變化大,
業務復雜,軟件產品化等客觀原因,存儲過程就不失一個好的辦法,比如erp實施;很多時候都是懂點sql 的實施人員去做,而不是開發人員再去搗鼓代碼。