視圖限制
如要在 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 選項的情況下建立索引。