【SQL Server学习笔记】SQL SERVER 视图
視圖包括:普通視圖,索引視圖,分布式分區視圖。
關于視圖的最佳實踐:
???? A、對視圖進行性能優化的過程和普通的select查詢語句的優化過程是一樣的。
???? B、不要在一個視圖的定義中調用另一個視圖。
???? C、如果可能的話盡量使用存儲過程而不是視圖。因為存儲過程能重用執行計劃,性能會有提升,存儲過程還能減少網絡流量,并且實現復制的業務邏輯,而且與視圖相比,編碼限制更少。
?
1、普通視圖
視圖允許一個select語句中最多定義1024列,不可以在視圖定義中使用某些select元素,包括into,option,compute,compute by,表變量,臨時表,在使用了top關鍵字時才能使用order by子句。
--1.1創建視圖 create view dbo.v_wcT as select wcId, wcV, wcDate from wcT go --1.2使用視圖 select * from dbo.v_wcT --視圖元數據 --2.1視圖定義 select object_id, definition from sys.sql_modules where object_id = object_id('dbo.v_wcT') --2.2視圖的架構 select s.name, --視圖的架構 v.name --視圖的名稱 from sys.views v inner join sys.schemas s on v.schema_id = s.schema_id --2.3視圖中列的信息 select v.name, --視圖名稱 c.name --視圖中的列名 from sys.views v inner join sys.columns c on v.object_id = c.object_id --3.當視圖引用的表對象修改后,視圖的元數據可能過時了, --如:更改了視圖中引用列的寬度,在刷新之前,元數據還是修改前的寬度 --3.1 alter table wcT alter column wcV varchar(50) not null --3.2查看元數據 select v.name, c.name, c.max_length --發現元數據沒有變化,還是100 from sys.views v inner join sys.columns c on v.object_id = c.object_id where c.name = 'wcV' --3.3刷新視圖元數據 exec sp_refreshview @viewname = 'dbo.v_wcT' --3.4再次查看元數據 select v.name, c.name, c.max_length --發現這里已經變為50 from sys.views v inner join sys.columns c on v.object_id = c.object_id where c.name = 'wcV' --3.5適用于:存儲過程,觸發器,用戶定義函數,視圖 exec sp_refreshsqlmodule @name = 'dbo.v_wcT' --4.修改視圖 alter view dbo.v_wcT as select wcId, wcV, wcDate from wcT where wcId > 2 go --5.1通過視圖來insert,update,delete --視圖的定義中不能有:聚合函數,group by,distinct,having --只有當基礎數據表對查詢編寫者不可見的時候,才應該使用視圖來插入,更新數據 insert into dbo.v_wcT(wcId,wcV,wcDate) values(8,'wc','2010-10-01') --查看新增的數據 select * from wcT where wcId = 8 --5.2通過視圖刪除數據 delete from dbo.v_wcT where wcId = 8 --6.1視圖加密 alter view dbo.v_wcT with encryption as select wcId, wcV, wcDate from wcT where wcId > 2 go --6.2發現定義是NULL select object_id, definition from sys.sql_modules where object_id = object_id('dbo.v_wcT') --7.刪除視圖 drop view dbo.v_wcT
2、索引視圖
sql server中有2個概念,一個是索引,一個是視圖。那么如果把這兩個結合起來,就是索引視圖.
原來我們都知道索引,就是按照某個字段,建立一個物理的對象,實際最在于硬盤上的數據。
而視圖,其實就是一個虛擬表,就是一個定義,實際上并不存在數據,要查詢視圖,都是通過定義中的基本表來訪問數據的。
通過索引視圖,其實就是按照索引的定義,建立了一個索引,也就是把虛擬的東西,給實體化了,實體化為實際的存在于硬盤上的數據。
但是索引視圖,有不少限制條件:
比如:
轉載于:https://blog.51cto.com/yupeigu/1368096
總結
以上是生活随笔為你收集整理的【SQL Server学习笔记】SQL SERVER 视图的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经典算法题每日演练——第三题 猴子吃桃
- 下一篇: linux下Makefile的简单例子及