存儲過程和視圖的區別


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM