Welcome

首页 / 数据库 / SQLServer / 用SQL Server 2005索引视图提高性能二

用SQL Server 2005索引视图提高性能二2007-06-01 本站收集整理 视图限制

如要在 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 选项的情况下创建索引。