1. 程式人生 > >【mysql 儲存過程】應用儲存過程的優點與缺點

【mysql 儲存過程】應用儲存過程的優點與缺點

總結下使用儲存過程的優缺點
一、儲存過程優點
儲存過程是一組預先建立並用指定的名稱儲存在資料庫伺服器上的 SQL 語句,將使用比較頻繁或者比較複雜的操作,預先用 SQL 語句寫好並存儲起來,以後當需要資料庫提供相同的服務時,只需再次執行該儲存過程。

1.具有更好的效能

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

2.功能實現更加靈活

儲存過程中可以應用條件判斷和遊標等語句,有很強的靈活性,可以直接呼叫資料庫的一些內建函式,完成複雜的判斷和較複雜的運算。

3.減少網路傳輸

複雜的業務邏輯需要多條 SQL 語句,當客戶機和伺服器之間的操作很多時,將產生大量的網路傳輸。如果將這些操作放在一個儲存過程中,那麼客戶機和伺服器之間的網路傳輸就會減少,降低了網路負載。

4.具有更好的安全性

(1)資料庫管理人員可以更好的進行許可權控制,儲存過程可以遮蔽對底層資料庫物件的直接訪問,使用 EXECUTE 許可權呼叫儲存過程,無需擁有訪問底層資料庫物件的顯式許可權。

(2)在通過網路呼叫過程時,只有對執行過程的呼叫是可見的。無法看到表和資料庫物件名稱,不能嵌入SQL 語句,有助於避免 SQL 注入攻擊。

二、儲存過程的弊端

1.架構不清晰,不夠面向物件

儲存過程不太適合面向物件的設計,無法採用面向物件的方式將業務邏輯進行封裝,業務邏輯在儲存層實現,增加了業務和儲存的耦合,程式碼的可讀性也會降低,

2.開發和維護要求比較高

儲存過程的編寫直接依賴於開發人員,如果業務邏輯改動較多,需要頻繁直接操作資料庫,大量業務降維到資料庫,很多異常不能在程式碼中捕獲,出現問題較難排查,需要資料庫管理人員的幫助。

3.可移植性差

過多的使用儲存過程會降低系統的移植性。在對儲存進行相關擴充套件時,可能會增加一些額外的工作。

三、總結
儲存過程與SQL語句如何抉擇?

架構設計沒有絕對,只有在當前的場景下最合適的。

普通的專案開發中,不建議大量使用儲存過程,對比SQL語句,儲存過程適用於業務邏輯複雜,比較耗時,同時請求量較少的操作,例如後臺大批量查詢、定期更新等。

(1)當一個事務涉及到多個SQL語句時或者涉及到對多個表的操作時可以考慮應用儲存過程

(2)在一個事務的完成需要很複雜的商業邏輯時可以考慮應用儲存過程

(3)比較複雜的統計和彙總可以考慮應用後臺儲存過程