摘抄觀點:
- 存儲過程(Stored Procedure):一組可編程的函數,是為了完成特定功能的SQL語句集,經編譯創建並保存在數據庫中,用戶可通過指定存儲過程的名字並給定參數(需要時)來調用執行。
- 存儲過程一般是作為一個獨立的部分來執行( EXECUTE 語句執行),而函數可以作為查詢語句的一個部分來調用(SELECT調用),由於函數可以返回一個表對象,因此它可以在查詢語句中位於FROM關鍵字的后面。 SQL語句中不可用存儲過程,而可以使用函數。函數是可以嵌入在sql中使用的,可以在select中調用,而存儲過程不行。
- 數據庫專心做好數據存取就夠了,業務都交給程序去實現!別把業務層的東西整到數據庫里去。互聯網基本不會用存儲過程
- 因為數據庫開發和優化的復雜性,DBA根本就不相信寫業務邏輯的人能寫出好的SQL(同時不相信ORM),業務邏輯的開發者也不想研究schema后面的水有多深,所以存儲過程很好的解決了責任分工的問題。
- 存儲過程開發快,升級方便,不用替換業務版本,跑下數據升級腳本就行。參加過一個大項目業務,業務邏輯大部分是oracle pl/sql存儲過程實現。后來性能遇到瓶頸,熱點查詢app代碼重寫了一遍。
- 存儲過程一旦調試完成通過后就能穩定運行,這與各個業務在一段時間內是相對穩定和確定是匹配的;存儲過程大大地減少了業務系統與數據庫的交互,一定程度降低了業務系統與數據庫的耦合,例如即使業務系統與應用系統不在同一城市,對性能的影響也可控(100條SQL語句交互一次,即使延時由同城1ms增加到異地50ms,也只是增加49ms,如果交互100次,則增加4900ms)。在互聯網行業,存儲過程很少使用,一個重要的原因是MySQL的廣泛使用,而MySQL的存儲過程的功能很弱(跟商業數據庫相比);另外也跟互聯網行業變化快有一定的關系。
引用出處:
Mysql 存儲過程和函數區別 http://www.cnblogs.com/youxin/p/3568379.html
MySQL存儲過程_創建-調用-參數 http://www.cnblogs.com/geaozhang/p/6797357.html
存儲過程在實際項目中用的多嗎?https://www.zhihu.com/question/54408187