分析儲存過程的使用場景及其優缺點
當 一個事務涉及到多個SQL語句時或者涉及到對多個表的操作時就要考慮用儲存過程;當在一個事務的完成需要很複雜的商業邏輯時(比如,對多個數據的操作,對 多個狀態的判斷更改等)要考慮;還有就是比較複雜的統計和彙總也要考慮,但是過多的使用儲存過程會降低系統的移植性。
為了系統的控制方便,例如當系統進行調整時,這是隻需要將後臺儲存過程進行更改,而不需要更改客戶端程式。也無需重新安裝客戶端應用程式。
儲存過程不僅僅適用於大型專案,對於中小型專案,使用儲存過程也是非常有必要的。其威力和優勢主要體現在:
1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般 SQL 語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。
2.當對資料庫進行復雜操作時(如對多個表進行 Update,Insert,Query,Delete 時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。這些操作,如果用程式來完成,就變成了一條條的 SQL 語句,可能要多次連線資料庫。而換成儲存,只需要連線一次資料庫就可以了。
3.儲存過程可以重複使用,可減少資料庫開發人員的工作量。
4.安全性高,可設定只有某此使用者才具有對指定儲存過程的使用權。
優點:
1.速度快。尤其對於較為複雜的邏輯,減少了網路流量之間的消耗
有的過程和函式達到了幾百行,一個微型編譯器,相信用程式就更麻煩了。
2.寫程式簡單,採用儲存過程呼叫類,呼叫任何儲存過程都只要1-2行程式碼。
3.升級、維護方便
4.除錯其實也並不麻煩,可以用查詢分析器
5.如果把所有的資料邏輯都放在儲存過程中,那麼asp.net只需要負責介面的顯示阿什麼的,出錯的可能性最大就是在儲存過程。我碰到的就一般是這種情況。
缺點:
1.可移植性差,我一直採用sql server開發,可是如果想賣自己的東西,發現自己簡直就是在幫ms賣東西,呵呵。想換成mysql,確實移植麻煩。
2.採用儲存過程呼叫類,需要進行兩次呼叫操作,一次是從sql server中取到過程的引數資訊,並且建立引數;第二次才是呼叫這個過程。多了一次消耗。
不過這個缺點可以在專案開發完成,過程引數完全確定之後,把所有過程引數資訊倒入到一個xml檔案中來提高效能。
當一個業務同時對多個表進行處理的時候採用儲存過程比較合適。
- 使用儲存過程在一般情況下會提高效能,因為資料庫優化了儲存過程的資料訪問計劃並應用快取方便以後的查詢;
- 儲存過程單獨保護存在於資料庫中。客戶端可以獲取許可權執行儲存過程,而不需要對底層的具體表設定其他的訪問許可權;
- 儲存過程會使得維護起來更加方便,因為通常修改一個儲存過程要比在一個已經發布的元件中修改SQL語句更加方便;
- 儲存過程給底層資料格式增添了額外的抽象層。使得使用儲存過程的客戶端對儲存過程的實現細節以及對底層資料格式是隔離獨立的;
- 儲存過程能夠緩解網路頻寬,因為可以批量執行SQL語句而不是從客戶端傳送超負載的請求。
複雜的資料處理用儲存過程,如有些報表處理,多條件多表聯合查詢,並做分頁處理。