標籤:mysql 預存程序 優缺點 辛星 優劣
我們常用的SQL語句在執行的時候需要首先進行編譯,然後執行,而預存程序則是一組為了完成特定功能的SQL語句集,它直接編譯好了儲存在資料庫中,使用者通過指定預存程序的名字即可調用該預存程序。
預存程序的優點主要包括以下幾點:
第一點,效能提高。這是相對於不適用預存程序來說的,因為預存程序在建立的時候就編譯好了,而後每次調用都不會再次編譯,這相對於傳統的SQL語句中每次調用都需要編譯的情況來說,效能提高了何止一點兩點。
第二點,重用性強。預存程序使用名字即可使用,也就是傳說中的“一次編寫,隨便調用”。這樣不僅提高了重用性,還減少了出錯的幾率,也會加快開發速度,可以說是一件非常好的事情。
第三點,減少網路流量。這一點對於小資料量的時候一般體現不出來,那麼當資料量較大的時候,我們會發現由於使用預存程序比使用SQL語句會使用更少的位元組數,因此它會降低傳輸的資料量。
第四點,安全性提高。由於預存程序也可以使用許可權控制,而且參數化的預存程序可以防止SQL注入攻擊,也在一定程度上保證了安全性。
第五點,靈活性增強。由於預存程序可以使用流程式控制制語句來編寫,導致它有著很強的靈活性,可以根據實際情況來執行不同的SQL語句,而不是只能單純的簡單的執行命令。而且該預存程序還可以修改其邏輯而其他部分不用改變,也就是說,我們的表的結構改變了,我們只需要修改相應的預存程序即可,我們的Java或者PHP等程式不需要改變。
第六點,當業務複雜的時候,預存程序會減少工作量,為什麼呢,原因很簡單,如果我們不適用預存程序,那麼就會導致我們先從資料庫中取出來資料,然後經過計算,再放入到資料庫中,這個開銷還是蠻大的,這中間的開銷包括我們的Java或者PHP程式串連資料庫擷取結果集等若干操作,如果我們使用了預存程序,那麼就沒有那麼多事了,直接在mysql內就搞定了。
好,上面說完了預存程序的優點,當然預存程序也肯定有它的缺點,下面是它的幾個缺點:
第一點,工作量加大。這裡並不是說我們把程式該做的事讓mysql去做不好,而是mysql本身並沒有很像樣的IDE來開發我們的預存程序,我們很多時候還是需要手寫,這樣就會比較麻煩,而且預存程序的調試也是一個問題,沒有很像樣的調試工具。
第二點,優勢不明顯。運行速度上,對於大多數的語句緩衝來說,編譯sql的時間開銷並不是很大,但是執行預存程序還需要檢查許可權等一些其他開銷,所以,對於很簡單的sql,預存程序並沒有很大優勢。
第三點,贅餘功能。對web程式來說,我們串連資料庫的使用者往往就是同一個,不需要太多的安全機制,所以,對於安全上的檢測看上去很好,實際上優點多餘。
第四點,小型程式完全無用。對於小型web應用來說,它的使用價值就更小了,反而會拖累開發進度。
第五點,對於營運上。當我們的程式要更換資料庫的時候,它的移植性相對於不適用預存程序要複雜一些,對於維護上,由於是在db端,因此比server端的程式更好維護一些。
辛星解讀mysql中的預存程序的優劣