存儲過程和sql語句的差別


         存儲過程(Stroed Proceduer)是在大型數據庫系統中,一組為了完成特定功能的SQL語句集,經編譯后,存儲在數據庫中。用戶通過指定存儲過程的名字並給出參數(如果該存儲過程有參數)來執行它。再運行存儲過程前,數據庫已對其進行了語法和句法分析,並給出了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。由於執行SQL語句的大部分工作已經完成,所以存儲過程能以雞塊的速度執行。

         SQL語句即結構化查詢語言(Structured Query Language),是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系數據庫系統;同時也是數據庫腳本文件的擴展名。SQL語句無論是種類還是數量都是繁多的,很多語句也是經常要用到的,SQL查詢語句就是一個典型的例子,無論是高級查詢還是低級查詢,SQL查詢語句的需求是最頻繁的。

         存儲過程包含SQL語句。

         存儲過程的代碼建立與規則,已經在之前的文章中涉及該篇不再贅述,點擊鏈接查看:存儲過程的創建與修改存儲過程的創建規則

存儲過程的優點:

存儲過程是一組預先創建並用指定的名稱存儲在數據庫服務器上的 SQL 語句,將使用比較頻繁或者比較復雜的操作,預先用 SQL 語句寫好並存儲起來,以后當需要數據庫提供相同的服務時,只需再次執行該存儲過程。

1.具有更好的性能

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

2.功能實現更加靈活

存儲過程中可以應用條件判斷和游標等語句,有很強的靈活性,可以直接調用數據庫的一些內置函數,完成復雜的判斷和較復雜的運算。

3.減少網絡傳輸

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

4.具有更好的安全性

 (1)數據庫管理人員可以更好的進行權限控制,存儲過程可以屏蔽對底層數據庫對象的直接訪問,使用 EXECUTE 權限調用存儲過程,無需擁有訪問底層數據庫對象的顯式權限。

(2)在通過網絡調用過程時,只有對執行過程的調用是可見的。無法看到表和數據庫對象名稱,不能嵌入SQL 語句,有助於避免 SQL 注入攻擊。

存儲過程的弊端:

1.架構不清晰,不夠面向對象

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

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

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

3.可移植性差

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

存儲過程與SQL語句如何抉擇

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

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

(1)當一個事務涉及到多個SQL語句時或者涉及到對多個表的操作時可以考慮應用存儲過程
(2)在一個事務的完成需要很復雜的商業邏輯時可以考慮應用存儲過程
(3)比較復雜的統計和匯總可以考慮應用后台存儲過程

資料來源:https://www.cnblogs.com/binyue/p/6442310.html

存儲過程與sql語句的區別:

1、編寫

存儲過程:編寫比較難;

sql語句:相對簡單;

2、性能

存儲過程:高,可移植性高,復用性高;

sql語句:低,可移植性差,不可復用;

3、安全

存儲過程:比sql語句相對來說安全;

sql語句:參數化比較安全;

4、網絡傳輸

存儲過程:數據量小,減少網絡數據傳輸量,只需存儲過程名即可;

sql語句:數據類量大,占用帶寬大;

5、速度

存儲過程:速度快,已經編譯過了;

sql語句:預編譯,執行一行編譯一行;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM