1. 程式人生 > >為什麼要用儲存過程?

為什麼要用儲存過程?

儲存過程概念

儲存過程是一些sql語句和控制語句組成的被封裝起來的過程,它駐留在資料庫中,可以被客戶應用程式通過儲存過程名字呼叫,也可以從另一個儲存過程或觸發器呼叫。

它的引數可以被傳遞和返回,與應用程式中的函式過程類似,儲存過程可以通過名字來呼叫,具有輸入引數和輸出引數。

儲存過程分類

1) 返回記錄集的儲存過程              ----從資料庫返回符合一個或幾個條件的記錄

2) 返回數值的儲存過程(標量儲存過程)----在資料庫執行一個有返回值的函式或命令

3) 行為儲存過程                      -----在資料庫中的更新和刪除操作

為什麼要是用儲存過程?

(1)

執行速度快——儲存過程只在建立時進行編譯,以後每次執行儲存過程都不需要重新編譯,而一般SQL語句沒執行一次就需編譯一次,所以使用儲存過程可提高資料庫的執行速度。

(2)減少網路通訊量——當對資料庫進行復雜操作時,(如對多個表進行insertupdateselectdelete時)可將這些複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。這些操作,如果用程式完成就是多條SQL語句,可能要多次連線資料庫,而換成儲存過程只需一次連線。

(3)更強的適應性與複用性——儲存過程可以重複使用,提高了可重用性,減少資料庫開發人員的工作量。

(4)可維護性高——更新儲存過程通常比更改、測試以及重新部署程式集需要較少的時間和精力。

(5)安全性高,可設定只有某使用者才能對指定儲存過程的使用權,且儲存過程比多條sql穩定,只要資料庫不出現問題,基本上是不會出現什麼問題的。

(6)分散式工作——應用程式和資料庫的編碼工作可以單獨進行,減少耦合度。

(7)更好的版本控制,通過svn等原始碼控制工具可以輕鬆恢復或引用舊版本的儲存過程。

儲存過程的缺點

(1)開發除錯差:無良好的IDE開發工具,儲存過程的除錯比一般SQL要複雜的多。

(2)可移植性差:由於儲存過程將應用程式繫結到資料庫上,因此使用儲存過程封裝業務邏輯將限制應用程式的可移植性。

(3)重新編譯問題,因為後端程式碼是執行前編譯的,如果帶有引用關係的物件發生改變時,受影響的儲存過程、包將需要重新編譯(不過也可以設定成執行時刻自動編譯)。

(4)如果在一個程式系統中大量的使用儲存過程,到程式交付使用的時候隨著使用者需求的增加會導致資料結構的變化,接著就是系統的相關問題了,最後如果使用者想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。