索引(物化)視圖

索引(物化)視圖

視圖的基礎知識

什麼是視圖?

視圖也稱爲虛擬表,標準視圖的結果集不是永久地存儲在數據庫中。每次查詢引用標準視圖時,SQL Server 都會在內部將視圖的定義替換爲該查詢,直到修改後的查詢僅引用基表。然後,它將照常運行所得到的查詢。

註釋:數據庫的設計和結構不會受到視圖中的函數、where 或 join 語句的影響。不能對視圖進行增、刪、改操作

分類

邏輯(標準)視圖、索引(物化)視圖。

 

邏輯視圖和索引視圖

邏輯視圖就是我們平常見到的視圖,視圖的數據不獨立存儲,而是通過視圖的定義取原表的數據。

索引視圖,即物化視圖,顧名思義,是物化的,有實際存儲的,可以建立索引的。索引視圖對視圖的定義有很嚴格的要求。

爲什麼要用索引視圖

對於標準視圖而言,爲每個引用視圖的查詢動態生成結果集的開銷很大,特別是對於那些涉及對大量行進行復雜處理(如聚合大量數據或聯接許多行)的視圖。如果在查詢中頻繁地引用這類視圖,可通過對視圖創建唯一聚集索引來提高性能。對視圖創建唯一聚集索引後,結果集將存儲在數據庫中,就像帶有聚集索引的表一樣。

索引視圖的建立

要點

1.必須要加上WITH SCHEMABINDING, 就是綁定到架構.

2.創建完視圖後必須緊跟着創建一個CLUSTERED聚集唯一索引.

3.只支持兩部分命名的表或UDF,  dbo.SalesOrder. 

4.涉及到多個表連接時不支持left join right join的寫法只能用from...where的方式或inner join的方式連接. (這一點有時很要命如果join多個表而這些表又不能都用inner join的方式時.)

5.不支持table.*這種懶省事的方式得一個一個把想要的列寫清楚.

實例

--設定會話設置

SET ANSI_NULLS ON

GO

SET ANSI_PADDING ON

GO

SET ANSI_WARNINGS ON

GO

SET CONCAT_NULL_YIELDS_NULL ON

GO

SET QUOTED_IDENTIFIER ON

GO

SET NUMERIC_ROUNDABORT OFF

GO

 

--創建視圖(很多限制)

create VIEW vUserInfo

with SCHEMABINDING--綁定結構

AS

SELECT dbo.[User].ID,dbo.[User].AddTime,dbo.op.Name,dbo.op.Pwd 

FROM dbo.[User] 

INNER JOIN dbo.OP ON dbo.[User].ID=dbo.OP.ID

--創建聚集索引

CREATE UNIQUE CLUSTERED INDEX PK_vUserInfo ON vUserInfo(ID)

--視圖佔用多少空間

EXECUTE sp_spaceused 'vUserInfo'


 

 

 

https://msdn.microsoft.com/zh-cn/library/ms187864


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章