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


摘抄觀點:

  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的存儲過程的功能很弱(跟商業數據庫相比);另外也跟互聯網行業變化快有一定的關系。

引用出處:

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM