1. 程式人生 > 實用技巧 >儲存過程和檢視的區別

儲存過程和檢視的區別

SQL裡面不帶引數的儲存過程與檢視的區別
1、儲存過程是程式化的sql可以實現一般sql不能實現的功能。 如:先檢索一個表得到一些資料,經過一定的編輯後更新到另外一個表中、這就可以用不帶引數的儲存過程實現。 2、檢視是虛擬表,不儲存資料,儲存的是sql,檢索他的時候實際上是執行定義它的sql語句。

說明:從你的問題上可以看出,你使用儲存過程僅僅是用它檢索資料,所以你會產生這樣的疑問,一定要記住,儲存過程理解的簡單一點就是“資料庫中的程式”,
可以在不需要外部程式(如C,java,vb等)的情況下,讓資料庫自己解決複雜的、用一般sql不能實現的功能,而檢視則不然。

檢視和儲存過程比是沒什麼意義的
檢視就是虛擬表,把檢視和表比較還有點意思
檢視不佔實際空間,可以對任意的表進行疊加和剪裁,利用分割槽檢視的功能,能加快表的I/O讀取時間(需要2塊以上硬碟)

檢視只不過是儲存在sql server上的select語句罷了,當對檢視請求時,sql server會像執行一句普通的select語句那樣的執行檢視的select語句,它的效能並不像人們想象得那麼出色。
而儲存過程在編譯後可以生成執行計劃,這使得每次執行儲存過程的時候效率將會更高,這是儲存過程,另外臺提交引數的時候,使用儲存過程將會減少網路頻寬流量,這是儲存過程相對於普通的sql語句在效能上的最大的優勢。

檢視可以被看成是虛擬表或儲存查詢。可通過檢視訪問的資料不作為獨特的物件儲存在資料庫內。資料庫記憶體儲的是 SELECT 語句。SELECT 語句的結果集構成檢視所返回的虛擬表。使用者可以用引用表時所使用的方法,在 Transact-SQL 語句中通過引用檢視名稱來使用虛擬表。使用檢視可以實現下列任一或所有功能:
將使用者限定在表中的特定行上。
例如,只允許僱員看見工作跟蹤表內記錄其工作的行。
將使用者限定在特定列上。
例如,對於那些不負責處理工資單的僱員,只允許他們看見僱員表中的姓名列、辦公室列、工作電話列和部門列,而不能看見任何包含工資資訊或個人資訊的列。
將多個表中的列聯接起來,使它們看起來象一個表。
聚合資訊而非提供詳細資訊。
例如,顯示一個列的和,或列的最大值和最小值。
------------------
資料庫中的索引與書籍中的索引類似。在一本書中,利用索引可以快速查詢所需資訊,無須閱讀整本書。在資料庫中,索引使資料庫程式無須對整個表進行掃描,就可以在其中找到所需資料。
------------------

儲存過程可以使得對資料庫的管理、以及顯示關於資料庫及其使用者資訊的工作容易得多。儲存過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱儲存並作為一個單元處理。儲存過程儲存在資料庫內,可由應用程式通過一個呼叫執行,而且允許使用者宣告變數、 有條件執行以及其它強大的程式設計功能。
儲存過程可包含程式流、邏輯以及對資料庫的查詢。它們可以接受引數、輸出引數、返回單個或多個結果集以及返回值。
可以出於任何使用 SQL 語句的目的來使用儲存過程,它具有以下優點:
可以在單個儲存過程中執行一系列 SQL 語句。
可以從自己的儲存過程內引用其它儲存過程,這可以簡化一系列複雜語句。
儲存過程在建立時即在伺服器上進行編譯,所以執行起來比單個 SQL 語句快。

1、執行速度比普通的baiSQL語句快
再執行儲存過程du前,資料庫已對其進行了語法和句法分析,並給出了優化執行方案。這種已經編譯好的過程可極大地改善SQL語句的效能。 由於執行SQL語句的大部分工作已經完成,所以儲存過程能以極快的速度執行。
2、便於集中控制
當企業規則變化時,只需要在資料庫的伺服器中修改相應的儲存過程,而不需要逐個的在應用程式中修改,應用程式保持不變即可,這樣就省去了修改應用程式工作量。
3、可以降低網路的通訊量
4、保證資料庫的安全性和完整性
通過儲存過程不僅可以使沒有許可權的使用者在控制之下間接地存取資料庫,保證資料的安全;而且可以使相關的動作在一起發生,從而可以維護資料庫的完整性。
5、靈活性
儲存過程可以用流控制語句編寫,具有很強的靈活性,可以完成複雜的判斷和運算,可以根據條件執行不通SQL語句。