當乙個事務涉及到多個
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檔案中來提高效能。
當乙個業務同時對多個表進行處理的時候採用儲存過程比較合適。
複雜的資料處理用儲存過程,如有些報表處理
多條件多表聯合查詢
,並做分頁處理
什麼時候使用引用 什麼時候使用指標
使用引用引數的主要原因有兩個 程式設計師能修改呼叫函式中的資料物件 通過傳遞引用而不是整個資料 物件,可以提高程式的執行速度一般的原則 對於使用引用的值而不做修改的函式 如果資料物件很小,如內建資料型別或者小型結構,則按照值傳遞 如果資料物件是陣列,則使用指標 唯一的選擇 並且指標宣告為指向cons...
什麼時候使用抽象類, 什麼時候使用介面
介面是一種協定,抽象類則相當於類模板。使用抽象類,而不要使用介面來分離協定與實現。如果需要提供多型層次結構的值型別,使用介面。如果乙個型別必須實現多個協定,或者協定適用於多種型別,使用介面。雖然抽象類和介面都支援將協定與實現分離開來,但介面不能指定以後版本中的新成員,而抽象類可以根據需要新增成員以支...
什麼時候使用介面,什麼時候使用抽象類
使用抽象類是為了 的復用,而使用介面的動機是為了實現多型性。抽象類適合用來定義某個領域的固有屬性,也就是本質,介面適合用來定義某個領域的擴充套件功能。一 什麼時候使用抽象類?當2個或多個類中有重複部分的時候,我們可以抽象出來乙個基類,如果希望這個基類不能被例項化,就可以把這個基類設計成抽象類。當需要...