1. 程式人生 > >存儲過程和視圖的區別

存儲過程和視圖的區別

硬盤 容易 生成 reply 想象 簡單 text 什麽 單個

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 語句快。

存儲過程和視圖的區別