程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 辛星解讀mysql中的存儲過程的優劣

辛星解讀mysql中的存儲過程的優劣

編輯:MySQL綜合教程

辛星解讀mysql中的存儲過程的優劣


我們常用的SQL語句在執行的時候需要首先進行編譯,然後執行,而存儲過程則是一組為了完成特定功能的SQL語句集,它直接編譯好了存儲在數據庫中,用戶通過指定存儲過程的名字即可調用該存儲過程。

存儲過程的優點主要包括以下幾點:

第一點,性能提高。這是相對於不適用存儲過程來說的,因為存儲過程在創建的時候就編譯好了,而後每次調用都不會再次編譯,這相對於傳統的SQL語句中每次調用都需要編譯的情況來說,性能提高了何止一點兩點。

第二點,重用性強。存儲過程使用名字即可使用,也就是傳說中的“一次編寫,隨便調用”。這樣不僅提高了重用性,還減少了出錯的幾率,也會加快開發速度,可以說是一件非常好的事情。

第三點,減少網絡流量。這一點對於小數據量的時候一般體現不出來,那麼當數據量較大的時候,我們會發現由於使用存儲過程比使用SQL語句會使用更少的字節數,因此它會降低傳輸的數據量。

第四點,安全性提高。由於存儲過程也可以使用權限控制,而且參數化的存儲過程可以防止SQL注入攻擊,也在一定程度上保證了安全性。

第五點,靈活性增強。由於存儲過程可以使用流程控制語句來編寫,導致它有著很強的靈活性,可以根據實際情況來執行不同的SQL語句,而不是只能單純的簡單的執行命令。而且該存儲過程還可以修改其邏輯而其他部分不用改變,也就是說,我們的表的結構改變了,我們只需要修改相應的存儲過程即可,我們的Java或者PHP等程序不需要改變。

第六點,當業務復雜的時候,存儲過程會減少工作量,為什麼呢,原因很簡單,如果我們不適用存儲過程,那麼就會導致我們先從數據庫中取出來數據,然後經過計算,再放入到數據庫中,這個開銷還是蠻大的,這中間的開銷包括我們的Java或者PHP程序連接數據庫獲取結果集等若干操作,如果我們使用了存儲過程,那麼就沒有那麼多事了,直接在mysql內就搞定了。

好,上面說完了存儲過程的優點,當然存儲過程也肯定有它的缺點,下面是它的幾個缺點:

第一點,工作量加大。這裡並不是說我們把程序該做的事讓mysql去做不好,而是mysql本身並沒有很像樣的IDE來開發我們的存儲過程,我們很多時候還是需要手寫,這樣就會比較麻煩,而且存儲過程的調試也是一個問題,沒有很像樣的調試工具。

第二點,優勢不明顯。運行速度上,對於大多數的語句緩存來說,編譯sql的時間開銷並不是很大,但是執行存儲過程還需要檢查權限等一些其他開銷,所以,對於很簡單的sql,存儲過程並沒有很大優勢。

第三點,贅余功能。對web程序來說,我們連接數據庫的用戶往往就是同一個,不需要太多的安全機制,所以,對於安全上的檢測看上去很好,實際上優點多余。

第四點,小型程序完全無用。對於小型web應用來說,它的使用價值就更小了,反而會拖累開發進度。

第五點,對於運維上。當我們的程序要更換數據庫的時候,它的移植性相對於不適用存儲過程要復雜一些,對於維護上,由於是在db端,因此比server端的程序更好維護一些。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved