視圖限制
如要在 SQL Server 2005 中的視圖上創建一個索引,相應的視圖定義必須包含:
ANY、NOT ANY OPENROWSET、OPENQUERY、OPENDATASOURCE
不精確的(浮型、實型)值上的算術 OPENXML
COMPUTE、COMPUTE BY ORDER BY
CONVERT 生成一個不精確的結果 OUTER 聯接
COUNT(*) 引用帶有一個已禁用的聚集索引的基表
GROUP BY ALL 引用不同數據庫中的表或函數
派生的表(FROM 列表中的子查詢) 引用另一個視圖
DISTINCT ROWSET 函數
EXISTS、NOT EXISTS 自聯接
聚合結果(比如:SUM(x)+SUM(x))上的表達式 STDEV、STDEVP、VAR、VARP、AVG
全文謂詞 (CONTAINS、FREETEXT、CONTAINSTABLE、FREETEXTTABLE) 子查詢
不精確的常量(比如:2.34e5) 可為空的表達式上的 SUM
內嵌或表值函數 表提示(比如:NOLOCK)
MIN、MAX text、ntext、image、filestream 或 XML 列
不具有確定性的表達式 TOP
非 unicode 排序 UNION
SQL Server 2005 可檢測到的矛盾情況表示視圖將為空(比如,當 0=1 及 ...)
注意 索引視圖可能包含浮型和實型列;但是,如果這類列為非永久性的計算列,則不能包含在聚集索引鍵中。
GROUP BY 限制
如果存在 GROUP BY,VIEW 定義為:
一定包含 COUNT_BIG(*)。
一定不包含 HAVING、CUBE、ROLLUP 或 GROUPING()。
這些限制僅適用於索引視圖定義。即便不能滿足上述 GROUP BY 限制,查詢也可以在其執行計劃中使用索引視圖。
有關索引的要求
執行 CREATE INDEX 語句的用戶必須是視圖所有者。
如果視圖定義包含 GROUP BY 子句,唯一的聚集索引的鍵只能引用 GROUP BY 子句所指定的列。
一定不能在啟用 IGNORE_DUP_KEY 選項的情況下創建索引。
六、示例 本節中的例子闡述了如何結合兩類主要的查詢使用索引視圖:聚合和聯接。同時,說明了查詢優化器在確定某個索引視圖是否適用時所用的條件。有關完整的條件列表的信息,參閱“查詢優化器如何使用索引視圖”。
這些查詢基於 AdventureWorks 中的表。AdventureWorks 是 SQL Server 2005 所提供的示例數據庫,並可作為寫入方式來執行。在創建視圖前後,用戶可能想用 SQL Server Management Studio 中顯示預計的執行計劃工具,來查看查詢優化器所選擇的計劃。雖然這些例子說明了優化器選擇低成本執行計劃的方式,但是 AdventureWorks 示例由於太小而無法顯示出性能方面的提升。
在開始運用這些示例之前,確保通過運行下列命令對會話設置正確的選項:
設置
SET ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET CONCAT_NULL_YIELDS_NULL ON
SET NUMERIC_ROUNDABORT OFF
SET QUOTED_IDENTIFIER ON