提供安全机制,将用户限制在一个或多个基表中的数据的某个子集。 提供一种机制,允许开发人员定制用户如何才能以逻辑方式查看存储在基表中的数据。 SQL Server 2000 已经扩展了 SQL Server 视图的功能,以提高系统性能。它可以在一个视图上创建唯一的群集索引和非群集索引,可以改进最复杂查询的数据访问性能。在 SQL Server 2000 中,拥有唯一群集索引的视图被称为索引视图。
注意: 索引视图只是 SQL Server 2000 企业版和 SQL Server 2000 开发人员版的一个功能。
从数据库管理系统 (DBMS) 的观点来看,视图是数据(元数据)的说明。创建典型视图时,通过 SELECT 语句(定义一个显示为虚拟表的结果集)来定义元数据。当其它查询的 FROM 子句中引用了某个视图时,将从系统目录中检索该元数据,并对其进行扩展以代替该视图的引用。在视图扩展之后,查询优化器会为正在执行的查询编译单个执行计划。
SQL Server 查询优化器可自动确定何时可以将索引视图用于给定的查询执行中。查询中无需直接引用视图,优化器就可以将该视图用于查询执行计划。因此,无需对现有的应用程序本身进行任何更改,这些应用程序即可利用索引视图。唯一需要做的就是创建索引视图。
优化器的考虑因素
查询优化器会考虑几个条件来确定索引视图能涵盖部分查询还是整个查询。这些条件符合查询中的单个 FROM 子句并包含以下内容:
查询 FROM 子句中的表必须是索引视图 FROM 子句中的表的超集。 查询中的联接条件必须是视图中联接条件的超集。 查询中的聚合列必须是视图中的聚合列的子集。 查询选择列表中的所有表达式都必须源自于视图选择列表或源自于不包括在视图定义中的表。 查询搜索条件谓词必须是视图定义中搜索条件谓词的超集。视图搜索谓词中的每个合取项都必须以同样的形式出现在查询搜索谓词中。 查询搜索条件谓词中的所有列(属于视图定义中的表)都必须出现在下列一项或多项中: 视图定义中的同一个谓词。 GROUP BY 列表。 视图选择列表(若没有 GROUP BY 列表)。 如果查询包含多个 FROM 子句(子查询、派生表、UNION),优化器可以选择多个索引视图来管理含有多个 FROM 子句的查询。
注意: 也存在例外情形,即优化器可能将两个 FROM 子句折叠成一个(将子查询折叠成联接或将派生表折叠成联接变体)。如果出现此类情况,索引视图替换可能会涵盖原查询中的多个 FROM 子句。
经常执行的查询会聚合一个数据库中的数据,再聚合另一个数据库中的数据,然后联接结果。由于索引视图不能引用多个数据库中的表,所以您不能设计一个视图来执行整个进程。不过,可以为要进行聚合的每个数据库创建索引视图。如果优化器能够将索引视图与现有查询相匹配,至少聚合处理将会因为不必记录现有查询而提高速度。尽管联接处理不会加快,整个查询的速度却因使用了存储在索引视图中的聚合而加快。 经常执行的查询会聚合多个表中的数据,然后使用 UNION 来将结果结合起来。UNION 不允许在索引视图中使用。您可以设计一些视图来执行每个单独的聚合运算。然后优化器可以选择索引视图来加快查询的速度,而无需记录查询。尽管 UNION 处理没有改进,单个聚合进程却得以改进。