一、 基本知識
摘抄自http://www.cnblogs.com/kissdodog/p/3385161.html
索引視圖實際上是一種將一組唯一值“物化”為群集索引形式的視圖(白話是,給視圖中的唯一值列加聚集索引,然后數據會存儲在硬盤中),提高查詢速度。
通過使用來自第一個索引的聚集鍵作為參考點,SQL Server還能在視圖上建立額外的索引。
其限制如下:
- 如果視圖引用了任何用戶自定義函數,那么這些函數也必須是模式綁定的;
- 視圖不可以引用任何其他的視圖-只能引用表和UDF;
- 在視圖中引用的所有表和UDF必須采用兩部分的命名約定(例如:dbo..Customers),並且也必須具有和視圖相同的所有者;
- 視圖和視圖引用的所有對象必須在相同的數據庫中;
- 在創建視圖和所有底層表時,必須打開ANSI_NULLS以及QUOTED_IDENTIFIER選項;
- 視圖引用的任何函數必須是確定的;
7、必須要加上WITH SCHEMABINDING, 就是綁定到架構.
8、創建完視圖后, 必須緊跟着創建一個CLUSTERED聚集唯一索引,而且必須在第一列(第一列是唯一值,類似於主鍵那樣).
9、只支持兩部分命名的表或UDF, 如 dbo.SalesOrder.
10. 涉及到多個表連接時, 不支持left join 或right join的寫法, 只能用from...where的方式或inner join的方式連接. (這一點有時很要命 只能用inner join太蛋疼)
11. 不支持table.*這種懶省事的方式, 得一個一個把想要的列寫清楚.
--創建模式綁定視圖 CREATE VIEW PersonAge_vw WITH SCHEMABINDING AS SELECT Age,COUNT_BIG(*) AS CountAge FROM dbo.PersonTenMillion GROUP BY Age --為視圖創建索引 CREATE UNIQUE CLUSTERED INDEX ivPersonAge ON PersonAge_vw(Age)
SQL Server中的索引視圖也具有查詢重寫的功能,
所謂的查詢重寫,就是如果符合條件的數據在索引視圖上,並且查詢列都包含在在索引視圖上,此時可以直接通過查詢索引視圖來替代基於原始表的查詢。
如果物化視圖上沒有要查詢的列,則物化視圖無效。直接去表中查詢。
二、 詳細查看物化視圖執行及維護原理
http://www.cnblogs.com/wy123/p/6041122.html