關於數據庫存儲過程和函數的區別,優缺點以及各家之言

摘抄觀點:html

  1. 存儲過程(Stored Procedure):一組可編程的函數,是爲了完成特定功能的SQL語句集,經編譯建立並保存在數據庫中,用戶可經過指定存儲過程的名字並給定參數(須要時)來調用執行。
  2. 存儲過程通常是做爲一個獨立的部分來執行( EXECUTE 語句執行),而函數能夠做爲查詢語句的一個部分來調用(SELECT調用),因爲函數能夠返回一個表對象,所以它能夠在查詢語句中位於FROM關鍵字的後面。 SQL語句中不可用存儲過程,而可使用函數。函數是能夠嵌入在sql中使用的,能夠在select中調用,而存儲過程不行。
  3. 數據庫專心作好數據存取就夠了,業務都交給程序去實現!別把業務層的東西整到數據庫裏去。互聯網基本不會用存儲過程
  4. 由於數據庫開發和優化的複雜性,DBA根本就不相信寫業務邏輯的人能寫出好的SQL(同時不相信ORM),業務邏輯的開發者也不想研究schema後面的水有多深,因此存儲過程很好的解決了責任分工的問題。
  5. 存儲過程開發快,升級方便,不用替換業務版本,跑下數據升級腳本就行。參加過一個大項目業務,業務邏輯大部分是oracle pl/sql存儲過程實現。後來性能遇到瓶頸,熱點查詢app代碼重寫了一遍。
  6. 存儲過程一旦調試完成經過後就能穩定運行,這與各個業務在一段時間內是相對穩定和肯定是匹配的;存儲過程大大地減小了業務系統與數據庫的交互,必定程度下降了業務系統與數據庫的耦合,例如即便業務系統與應用系統不在同一城市,對性能的影響也可控(100條SQL語句交互一次,即便延時由同城1ms增長到異地50ms,也只是增長49ms,若是交互100次,則增長4900ms)。在互聯網行業,存儲過程不多使用,一個重要的緣由是MySQL的普遍使用,而MySQL的存儲過程的功能很弱(跟商業數據庫相比);另外也跟互聯網行業變化快有必定的關係。

引用出處:sql

Mysql 存儲過程和函數區別 http://www.cnblogs.com/youxin/p/3568379.html數據庫

MySQL存儲過程_建立-調用-參數 http://www.cnblogs.com/geaozhang/p/6797357.html編程

存儲過程在實際項目中用的多嗎?https://www.zhihu.com/question/54408187oracle

相關文章
相關標籤/搜索