當前位置:首頁 » 服務存儲 » 存儲過程的好處
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

存儲過程的好處

發布時間: 2022-01-30 11:34:30

存儲過程和sql語句的優缺點優點有哪些

存儲過程是一組予編譯的SQL語句
它的優點:1.允許模塊化程序設計,就是說只需要創建一次過程,以後在程序中就可以調用該過程任意次。
2.允許更快執行,如果某操作需要執行大量SQL語句或重復執行,存儲過程比SQL語句執行的要快。
3.減少網路流量,例如一個需要數百行的SQL代碼的操作有一條執行語句完成,不需要在網路中發送數百行代碼。
4.更好的安全機制,對於沒有許可權執行存儲過程的用戶,也可授權他們執行存儲過程。

㈡ SQL存儲過程有什麼好處

優點:

  1. 離數據最近,某些情況下可獲得更好性能

  2. 減少應用復雜度及應用伺服器壓力

  3. 需要顯式調用,不會像觸發器那樣出現問題難以定位

  4. 使用方便

缺點:

  1. 增加資料庫伺服器壓力。相當於將應用壓力轉嫁到資料庫上,而應用伺服器更容易擴展,也就是說大部分情況下資料庫伺服器資源比應用伺服器資源更加珍貴。

  2. 增加網路開銷。如存儲過程存取數據量較大,會造成較大網路開銷。

  3. 可移植性差。如系統有多中資料庫,或從某種資料庫遷移到另一種資料庫,則很有可能遇到兼容性問題。

  4. 導致多處存在業務邏輯。存儲過程某種程度就是將本應放在應用側處理的業務邏輯放到資料庫處理,這會導致業務邏輯存在於多個地方,增加調試維護困難。

  5. 在高並發系統中很可能會導致資料庫壓力瞬間增大。

  6. 存儲過程中的復雜運算會大量消耗資料庫伺服器資源。

總結:

一般情況下盡量少用或不用存儲過程,特別是在一個並發較高架構復雜的大型系統中,更是要減少存儲過程的使用,業務邏輯的工作就應該由應用伺服器處理,而不是交給資料庫。很多時候存儲過程確實可以快速解決問題,但它的維護性、擴展性、移植性等都不好。如果你的系統很小,架構比較簡單,並且開發人員對存儲過程熟悉,那麼可以考慮使用存儲過程減少工作量;但隨著系統增加,架構變復雜,開發人員越來越多,這時存儲過程的存在可能會導致更多的問題。當然,定時ETL或報表統計之類的任務,還是可以考慮使用存儲過程來做的。

㈢ oracle存儲過程有什麼好處

1。預編譯,已優化,效率較高。避免了SQL語句在網路中傳輸然後再解釋的低效率。
2。如果公司有專門的DBA,寫存儲過程可以他來做,程序員只要按他提供的介面調用就好了。這樣分開來做,比較清楚。
3。修改方便。嵌入在程序中的SQL語句修改比較麻煩,而且經常不能肯定該改的是不是都改了。SQLSERVER上的存儲過程修改就比較方便,直接改掉該存儲過程,調用它的程序基本不用動,除非改動比較大(如改了傳入的參數,返回的數據等)。
4。會安全一點。不會有SQL語句注入問題。

當然,也有缺點。特別是業務邏輯比較復雜時,全用存儲過程來寫,估計也累的夠嗆。

■SQL存儲過程執行起來比SQL命令文本快得多。當一個SQL語句包含在存儲過程中時,伺服器不必每次執行它時都要分析和編譯它。

■調用存儲過程,可以認為是一個三層結構。這使你的程序易於維護。如果程序需要做某些改動,你只要改動存儲過程即可

■你可以在存儲過程中利用Transact-SQL的強大功能。一個SQL存儲過程可以包含多個SQL語句。你可以使用變數和條件。這意味著你可以用存儲過程建立非常復雜的查詢,以非常復雜的方式更新資料庫。

㈣ 存儲過程有什麼優點

1. 運行速度: 大多數高級的資料庫系統都有statement cache的,所以編譯sql的花費沒什麼影響。但是執行存儲過程要比直接執行sql花費更多(檢查許可權等),所以對於很簡單的sql,存儲過程沒有什麼優勢。

2. 網路負荷:如果在存儲過程中沒有多次數據交互,那麼實際上網路傳輸量和直接sql是一樣的。
3. 團隊開發:很遺憾,比起成熟的IDE,沒有什麼很好存儲過程的IDE工具來支持,也就是說,這些必須手工完成。
4. 安全機制:對於傳統的C/S結構,連接資料庫的用戶可以不同,所以安全機制有用;但是在web的三層架構中,資料庫用戶不是給用戶用的,所以基本上,只有一個用戶,擁有所有許可權(最多還有一個開發用戶)。這個時候,安全機制有點多餘。
5. 用戶滿意:實際上這個只是要將訪問資料庫的介面統一,是用存儲過程,還是EJB,沒太大關系,也就是說,在三層結構中,單獨設計出一個數據訪問層,同樣能實現這個目標。
6. 開發調試:一樣由於IDE的問題,存儲過程的開發調試要比一般程序困難(老版本DB2還只能用C寫存儲過程,更是一個災難)。
7. 移植性:算了,這個不用提,反正一般的應用總是綁定某個資料庫的,不然就無法靠優化資料庫訪問來提高性能了。
8. 維護性:的確,存儲過程有些時候比程序容易維護,這是因為可以實時更新DB端的存儲過程,但是在3層結構下,更新server端的數據訪問層一樣能實現這個目標,可惜現在很多平台不支持實時更新而已。

㈤ 存儲過程在資料庫中的作用是什麼

第一:存儲過程因為SQL語句已經預編繹過了,因此運行的速度比較快。

第二:存儲過程可接受參數、輸出參數、返回單個或多個結果集及返回值。向程序返回錯誤原因。

第三:存儲過程運行比較穩定,不會有太多的錯誤。只要一次成功,以後都會按這個程序運行。

第四:存儲過程主要是在伺服器上運行,減少對客戶機的壓力。

第五:存儲過程可以包含程序流、邏輯以及對資料庫的查詢。同時可以實體封裝和隱藏數據邏輯。

第六:存儲過程可以在單個存儲過程中執行一系列SQL語句。

第七:存儲過程可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。

(5)存儲過程的好處擴展閱讀:

存儲過程的優點:

1、存儲過程的能力大大增強了SQL語言的功能和靈活性。

2、可保證數據的安全性和完整性。

3、通過存儲過程可以使沒有許可權的用戶在控制之下間接地存取資料庫,從而保證數據的安全。

4、通過存儲過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。

5、在運行存儲過程前,資料庫已對其進行了語法和句法分析,並給出了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的性能。

6、可以降低網路的通信量。

7、使體現企業規則的運算程序放入資料庫伺服器中,以便集中控制。

㈥ 存儲過程有什麼優點

類似於我們編程時的函數,將常用的或很復雜的工作,預先用SQL語句寫好並用一個指定的名稱存儲起來, 那麼以後要叫資料庫提供與已定義好的存儲過程的功能相同的服務時,只需調用execute,即可自動完成命令,跟函數調用差不多!
存儲過程的優點:
1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權

㈦ 簡述存儲過程的優點

1 模塊化編程 2. 加快速度 3.減少網路流量 4.提高系統安全性

㈧ 使用存儲過程有哪些優點

對於操作員來講,存儲過程簡化了操作員的操作,進程定時調用,可以讓系統自動進行定時化、批量化的操作,減少了操作員的工作量。

而且存儲過程中可以增加一些日誌處理,便於操作員對數據的跟蹤。

㈨ 存儲過程的優缺點

存儲過程的優缺點:
存儲過程優點:
1.由於應用程序隨著時間推移會不斷更改,增刪功能,T-SQL過程代碼會變得更復雜,StoredProcere為封裝此代碼提供了一個替換位置。
2.執行計劃(存儲過程在首次運行時將被編譯,這將產生一個執行計劃--
實際上是
Microsoft
SQL
Server為在存儲過程中獲取由
T-SQL
指定的結果而必須採取的步驟的記錄。)緩存改善性能。
但sql
server新版本,執行計劃已針對所有
T-SQL 批處理進行了緩存,而不管它們是否在存儲過程中,所以沒比較優勢了。
3.存儲過程可以用於降低網路流量,存儲過程代碼直接存儲於資料庫中,所以不會產生大量T-sql語句的代碼流量。
4.使用存儲過程使您能夠增強對執行計劃的重復使用,由此可以通過使用遠程過程調用
(RPC)
處理伺服器上的存儲過程而提高性能。RPC
封裝參數和調用伺服器端過程的方式使引擎能夠輕松地找到匹配的執行計劃,並只需插入更新的參數值。
5.可維護性高,更新存儲過程通常比更改、測試以及重新部署程序集需要較少的時間和精力。
6.代碼精簡一致,一個存儲過程可以用於應用程序代碼的不同位置。
7.更好的版本控制,通過使用
Microsoft
Visual
SourceSafe
或某個其他源代碼控制工具,您可以輕松地恢復到或引用舊版本的存儲過程。
8.增強安全性:
a、通過向用戶授予對存儲過程(而不是基於表)的訪問許可權,它們可以提供對特定數據的訪問;
b、提高代碼安全,防止
SQL注入(但未徹底解決,例如,將數據操作語言--DML,附加到輸入參數);
c、SqlParameter
類指定存儲過程參數的數據類型,作為深層次防禦性策略的一部分,可以驗證用戶提供的值類型(但也不是萬無一失,還是應該傳遞至資料庫前得到附加驗證)。
存儲過程缺點:
1.如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則您仍需要更新程序集中的代碼以添加參數、更新
GetValue()
調用,等等,這時候估計比較繁瑣了。
2.可移植性差
由於存儲過程將應用程序綁定到
SQL
Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。如果應用程序的可移植性在您的環境中非常重要,則將業務邏輯封裝在不特定於
RDBMS
的中間層中可能是一個更佳的選擇。
3.
大量採用存儲過程進行業務邏輯的開發致命的缺點是很多存儲過程不支持面向對象的設計,無法採用面向對象的方式將業務邏輯進行封裝,從而無法形成通用的可支持復用的業務邏輯框架。
4.代碼可讀性差,相當難維護.

㈩ 存儲過程的好處

存儲過程是保存起來的可以接受和返回用戶提供的參數的 Transact-SQL 語句的集合。可以創建一個過程供永久使用,或在一個會話中臨時使用(局部臨時過程),或在所有會話中臨時使用(全局臨時過程)。也可以創建在 Microsoft SQL Server啟動時自動運行的存儲過程。

語法
CREATE PROC [ EDURE ] procere_name [ ; number ]
[ { @parameter data_type }
[ VARYING ] [ = default ] [ OUTPUT ]
] [ ,...n ]

[ WITH
{ RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]

[ FOR REPLICATION ]

AS sql_statement [ ...n ]

參數
procere_name