鍍金池/ 問答/PHP  數(shù)據(jù)庫(kù)/ MySQL 存儲(chǔ)過程 優(yōu)點(diǎn)和缺點(diǎn)有哪些?

MySQL 存儲(chǔ)過程 優(yōu)點(diǎn)和缺點(diǎn)有哪些?

MySQL 存儲(chǔ)過程 優(yōu)點(diǎn)和缺點(diǎn)有哪些?

回答
編輯回答
爛人

存儲(chǔ)過程的優(yōu)點(diǎn)主要包括以下幾點(diǎn):

第一點(diǎn),性能提高。這是相對(duì)于不適用存儲(chǔ)過程來說的,因?yàn)榇鎯?chǔ)過程在創(chuàng)建的時(shí)候就編譯好了,而后每次調(diào)用都不會(huì)再次編譯,這相對(duì)于傳統(tǒng)的SQL語(yǔ)句中每次調(diào)用都需要編譯的情況來說,性能提高了何止一點(diǎn)兩點(diǎn)。

第二點(diǎn),重用性強(qiáng)。存儲(chǔ)過程使用名字即可使用,也就是傳說中的“一次編寫,隨便調(diào)用”。這樣不僅提高了重用性,還減少了出錯(cuò)的幾率,也會(huì)加快開發(fā)速度,可以說是一件非常好的事情。

第三點(diǎn),減少網(wǎng)絡(luò)流量。這一點(diǎn)對(duì)于小數(shù)據(jù)量的時(shí)候一般體現(xiàn)不出來,那么當(dāng)數(shù)據(jù)量較大的時(shí)候,我們會(huì)發(fā)現(xiàn)由于使用存儲(chǔ)過程比使用SQL語(yǔ)句會(huì)使用更少的字節(jié)數(shù),因此它會(huì)降低傳輸?shù)臄?shù)據(jù)量。

第四點(diǎn),安全性提高。由于存儲(chǔ)過程也可以使用權(quán)限控制,而且參數(shù)化的存儲(chǔ)過程可以防止SQL注入攻擊,也在一定程度上保證了安全性。

第五點(diǎn),靈活性增強(qiáng)。由于存儲(chǔ)過程可以使用流程控制語(yǔ)句來編寫,導(dǎo)致它有著很強(qiáng)的靈活性,可以根據(jù)實(shí)際情況來執(zhí)行不同的SQL語(yǔ)句,而不是只能單純的簡(jiǎn)單的執(zhí)行命令。而且該存儲(chǔ)過程還可以修改其邏輯而其他部分不用改變,也就是說,我們的表的結(jié)構(gòu)改變了,我們只需要修改相應(yīng)的存儲(chǔ)過程即可,我們的Java或者PHP等程序不需要改變。

第六點(diǎn),當(dāng)業(yè)務(wù)復(fù)雜的時(shí)候,存儲(chǔ)過程會(huì)減少工作量,為什么呢,原因很簡(jiǎn)單,如果我們不適用存儲(chǔ)過程,那么就會(huì)導(dǎo)致我們先從數(shù)據(jù)庫(kù)中取出來數(shù)據(jù),然后經(jīng)過計(jì)算,再放入到數(shù)據(jù)庫(kù)中,這個(gè)開銷還是蠻大的,這中間的開銷包括我們的Java或者PHP程序連接數(shù)據(jù)庫(kù)獲取結(jié)果集等若干操作,如果我們使用了存儲(chǔ)過程,那么就沒有那么多事了,直接在mysql內(nèi)就搞定了。

缺點(diǎn):
第一點(diǎn),工作量加大。這里并不是說我們把程序該做的事讓mysql去做不好,而是mysql本身并沒有很像樣的IDE來開發(fā)我們的存儲(chǔ)過程,我們很多時(shí)候還是需要手寫,這樣就會(huì)比較麻煩,而且存儲(chǔ)過程的調(diào)試也是一個(gè)問題,沒有很像樣的調(diào)試工具。

第二點(diǎn),優(yōu)勢(shì)不明顯。運(yùn)行速度上,對(duì)于大多數(shù)的語(yǔ)句緩存來說,編譯sql的時(shí)間開銷并不是很大,但是執(zhí)行存儲(chǔ)過程還需要檢查權(quán)限等一些其他開銷,所以,對(duì)于很簡(jiǎn)單的sql,存儲(chǔ)過程并沒有很大優(yōu)勢(shì)。

第三點(diǎn),贅余功能。對(duì)web程序來說,我們連接數(shù)據(jù)庫(kù)的用戶往往就是同一個(gè),不需要太多的安全機(jī)制,所以,對(duì)于安全上的檢測(cè)看上去很好,實(shí)際上優(yōu)點(diǎn)多余。

第四點(diǎn),小型程序完全無用。對(duì)于小型web應(yīng)用來說,它的使用價(jià)值就更小了,反而會(huì)拖累開發(fā)進(jìn)度。

第五點(diǎn),對(duì)于運(yùn)維上。當(dāng)我們的程序要更換數(shù)據(jù)庫(kù)的時(shí)候,它的移植性相對(duì)于不適用存儲(chǔ)過程要復(fù)雜一些,對(duì)于維護(hù)上,由于是在db端,因此比server端的程序更好維護(hù)一些。

2018年4月24日 16:41