關於存儲過程的優點
1. 為什麼要使用存儲過程
存儲過程是指一組具有某種特殊功能的sql語句集,常用於大型資料庫中,也出現於開發過程中。程序員經常運用存儲過程是由於其具有以下優點:
一、響應時間上來說有優勢:如果你在前台處理的話。可能會涉及到多次資料庫連接。但如果你用存儲過程的話,就只有一次。存儲過程可以給我們帶來運行效率提高的好處。
二、安全上使用了存儲過程的系統更加穩定:程序容易出現BUG不穩定,而存儲過程,只要資料庫不出現問題,基本上是不會出現什麼問題的。
(1)關於存儲過程的優點擴展閱讀
存儲過程不僅僅適用於大型項目,對於中小型項目,使用存儲過程也是非常有必要的。
一般來說,存儲過程的編寫比基本SQL語句復雜,編寫存儲過程需要更高的技能,更豐富的經驗。經自已測試,一個有著十萬條記錄的表,通過php調用存儲過程比通過PHP執行sql語句獲取所有記錄的時間,平均快0.4秒左右。
2. sql存儲過程的優點
1.存儲過程可以使得程序執行效率更高、安全性更好,因為過程建立之後
已經編譯並且儲存到資料庫,直接寫sql就需要先分析再執行因此過程效率更高,直接寫sql語句會帶來安全性問題,如:sql注入
2.建立過程不會很耗系統資源,因為過程只是在調用才執行。
3.如果我表book更新了
存儲過程是不是要重新遍歷一下表?不會,如果有需要根據book表更新而更新可考慮建立觸發器在特定條件觸發,如:insert,update,delete語法如下:
create
trigger
tr_book
on
book
for
insert,update,delete
as
begin
...
end
補充回答:數據量越大執行過程越長.如是幾十條幾或幾K可能看不出效果如果是上10W或者過100W你就會發現速度(查詢、更新)會慢很多,,隨著數據量增大你的存儲過程執行時間會更長是一定的
3. 什麼時候要用存儲過程,存儲過程的優點
使用存儲過程並沒有什麼時候的限制,說白了任何時候都可以使用存儲過程,因為存儲過程是經過編譯的程序片段,在資料庫啟動時已經載入在oracle的cache中了,並且任何人調用它都不會經過重新編譯,也不會進行語法分析及最近路徑選擇等耗時的操作,所以建議多使用。
存儲過程的優點:
1.存儲過程只在創造時進行編譯,以後每次執行存儲過程都不需再重新編譯,而一般SQL語句每執行一次就編譯一次,所以使用存儲過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行Update,Insert,Query,Delete時),可將此復雜操作用存儲過程封裝起來與資料庫提供的事務處理結合一起使用。
3.存儲過程可以重復使用,可減少資料庫開發人員的工作量
4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權
缺點:
1.如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則您仍需要更新程序集中的代碼以添加參數、更新
GetValue()
調用,等等,這時候估計比較繁瑣了。
2.可移植性差
由於存儲過程將應用程序綁定到
SQL
Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。
4. 26. 存儲過程的優缺點
存儲過程的優缺點:
優點:
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 的中間層中可能是一個更佳的選擇。
希望我的回答對你有幫助^_^
5. 存儲過程是什麼它的特點是什麼為什麼要用它它有什麼優缺點
存儲過程是什麼?存儲過程是一堆sql語句組成的 (有if 什麼的 可以控制執行哪裡 還有循環什麼的 )它的特點是什麼?特點是可以執行復雜的sql語句 為什麼要用它?因為 你在.net vb 什麼的裡面調用存儲過程 要比你在那裡寫sql語句執行的快的多存儲過程里已經寫好了sql語句 不用轉換 在.net vb 什麼的裡面寫sql語句 到資料庫里還要轉換所以快它有什麼優缺點?就是快 而且可以執行復雜的sql語句 方便 比如輸出某個表裡的所有記錄 寫好存儲過程 只要在用到的地方調用就可以了 不必反復去寫sql語句 方便的很
6. 資料庫系統原理 什麼是存儲過程有什麼優點
存儲過程也可以看成是函數的一種, 而且存儲過程中的過程如果放到了開發 系統的 D 層的時候執行效果也是相同的。 存儲過程是存儲在資料庫中的一個程序 塊, 裡麵包含了自己定義的一段程序來實現相應的功能,比如要選擇資料庫的表 裡面的記錄,就可以使用下面的存儲過程的框架:
這個實現的過程比較簡單, 就是利用的是資料庫自帶的存儲過程的模版,新 建存儲過
程的時候就可以非常方便的實現自己所需要的功能。 存儲過程中使用的 是資料庫的語言, 跟其他的高級語言的用法相似,熟練的使用資料庫的語言可以 加快開發的效率,技術也是很厲害的。 存儲過程的到底有什麼好處呢?一定要用存儲過程嗎? 存儲過程的優點: 1.存儲過程只在創造時進行編譯,以後每次執行存儲過 程都不需再重新編譯,而一般 SQL 語句每執行一次就編譯一次,所以使用存儲過 程可提高資料庫執行速度。 2.當對資料庫進行復雜操作時,可將此復雜操作用 存儲過程封裝起來與資料庫提供的事務處理結合一起使用。更多資料庫的知識, 盡在南京寶雲官網。 3.存儲過程可以重復使用,可減少資料庫開發人員的工作量 4.安全性高,可設定只有某此用戶才具有對指定存儲過程的使用權。 存儲過程有利於實現一系列的操作簡化,提高系統的執行效率,而且放在存 儲過程中的 SQL 語句是直接在資料庫中編譯過了的, 系統在執行的時候就可以減 少這部分代碼的資源開銷。 但是對於機房重構中,有時候我們只需要更新一個記錄中的某一個欄位的值, 這個時候用存儲過程就有點不劃算了,這個時候系統如 果不用存儲過程直接用 SQL 語句來說,是比較方便的。所以存儲過程並不是所有 的地方用都好,凡事都有一個合適的問題,一個度的問題。 可能有的人想存儲過程這么有用,而且對系統的性能有提升,那就強迫症的 都去使用存儲過程。 這里又有一個問題了,存儲過程的作用主要是對資料庫進行 操作, 那麼學過資料庫系統原理的我們就需要注意一個問題了,如何防止死鎖? 毫無節制的使用存儲過程, 而不考慮資料庫結構是不科學的。對於相同的表進行 不同的操作,所產生的結果也是不一樣的,產生的順序也是不一樣的,如何在存 儲過程中進行有效的操作來使系統健康強壯,這是需要注意的。 通過使用存儲過程, 可以更加清晰的理解資料庫和系統是如何相互關聯工作 的,存儲過程的使用不僅是一種技術上的提升,更是思想上的一種啟發,在今後 的開發工作中是否有相同的地方需要這樣的抽象封裝呢。 面對更多的重復出現的 封裝,我們的工作也將更加高效、簡潔。
7. 減速存儲過程的優點
1. 運行速度快:存儲過程一旦執行,在內存中就會保留一份這個存儲過程,這樣下次再執行同樣的存儲過程時,可以從內存中直接調用,所以執行速度會比普通sql快。
2. 減少網路傳輸:存儲過程直接就在資料庫伺服器上跑,所有的數據訪問都在資料庫伺服器內部進行,不需要傳輸數據到其它伺服器,所以會減少一定的網路傳輸。
3. 可維護性:存儲過程有些時候比程序更容易維護,這是因為可以實時更新DB端的存儲過程。
缺點
1. SQL本身是一種結構化查詢語言,但不是面向對象的,本質上還是過程化的語言,面對復雜的業務邏輯,過程化的處理會很吃力。同時SQL擅長的是數據查詢而非業務邏輯的處理,如果如果把業務邏輯全放在存儲過程裡面,違背了這一原則。如果部分業務邏輯放存儲過程里,另一部分業務邏輯放代碼里,導致業務實現太分散。
2. 開發調試復雜,由於IDE的問題,存儲過程的開發調試要比一般程序困難。
3. 沒辦法應用緩存。雖然有全局臨時表之類的方法可以做緩存,但同樣加重了資料庫的負擔。如果緩存並發嚴重,經常要加鎖,那效率實在堪憂。
4. 不支持群集,資料庫伺服器無法水平擴展,或者資料庫的切割(水平或垂直切割)。資料庫切割之後,存儲過程並不清楚數據存儲在哪個資料庫中。
總結
1. 適當的使用存儲過程,能夠提高我們SQL查詢的性能,
2. 存儲過程不應該大規模使用,濫用。
3. 隨著眾多ORM 的出現,存儲過程很多優勢已經不明顯。
4. SQL最大的缺點還是SQL語言本身的局限性——SQL本身是一種結構化查詢語言,我們不應該用存儲過程處理復雜的業務邏輯——讓SQL回歸它「結構化查詢語言」的功用。復雜的業務邏輯,還是交給代碼去處理吧
8. 存儲過程與存儲在客戶計算機的本地T-SQL語句相比,它具有什麼優點
我最大的感受是
1.最大的優點就是速度快,效率高。尤其對於較為復雜的邏輯,減少了網路流量之間的消耗
。
2.容易模塊化,升級、維護比較方便。
9. 什麼是存儲過程有什麼優點
存儲過程是事先經過編譯並存儲在資料庫中的一段SQL語句的集合,調用存儲過程可以簡化應用開發人員的很多工作,減少數據在資料庫和應用伺服器之間的傳輸,對於提高數據處理的效率是有好處的。
優點:
1、重復使用:存儲過程可以重復使用,從而可以減少資料庫開發人員的工作量。
2、減少網路流量:存儲過程位於伺服器上,調用的時候只需要傳遞存儲過程的名稱以及參數就可以了,因此降低了網路傳輸的數據量。
3、安全性:參數化的存儲過程可以防止SQL注入式攻擊,而且可以將Grant、Deny以及Revoke許可權應用於存儲過程。
(9)關於存儲過程的優點擴展閱讀:
存儲過程的缺點:
1、更改比較繁瑣:如果更改范圍大到需要對輸入存儲過程的參數進行更改,或者要更改由其返回的數據,則仍需要更新程序集中的代碼以添加參數、更新 GetValue() 調用,等等,這時候估計比較繁瑣。
2、可移植性差:由於存儲過程將應用程序綁定到 SQL Server,因此使用存儲過程封裝業務邏輯將限制應用程序的可移植性。如果應用程序的可移植性在您的環境中非常重要,則需要將業務邏輯封裝在不特定於 RDBMS 的中間層中。