可索引的视图集合是可能的视图集合的一个子集。任何可索引的视图在有或没有索引的情况下都可存在。
除了设计方针(“使用 SET 选项获得一致的结果”和“使用具有确定性的函数”这两节)中所列的要求外,还必须满足下列要求,以便在视图上创建唯一的聚集索引。
| • |
视图所引用的基表必须具有在创建表时所设的 SET 选项 ANSI_NULLS 的正确的值。可用 OBJECTPROPERTY 函数检查现有表上的 ANSI_NULLS 的值。 |
| • |
必须使用 WITH SCHEMABINDING 选项创建视图所引用的用户定义的函数。 |
| • |
必须使用 WITH SCHEMABINDING 选项创建视图。 |
| • |
必须由使用双结构名称 (schemaname.tablename) 的视图引用表。 |
| • |
必须由使用双结构名称 (schemaname.functionname) 的视图引用用户定义的函数。 |
| • |
必须正确设置 SET 选项 ANSI_NULLS 和 QUOTED_IDENTIFIER。 |
如要在 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,VIEW 定义为:
| • |
一定包含 COUNT_BIG(*)。 |
| • |
一定不包含 HAVING、CUBE、ROLLUP 或 GROUPING()。 |
这些限制仅适用于索引视图定义。即便不能满足上述 GROUP BY 限制,查询也可以在其执行计划中使用索引视图。
| • |
执行 CREATE INDEX 语句的用户必须是视图所有者。 |
| • |
如果视图定义包含 GROUP BY 子句,唯一的聚集索引的键只能引用 GROUP BY 子句所指定的列。 |
| • |
一定不能在启用 IGNORE_DUP_KEY 选项的情况下创建索引。 |





