索引视图

  在前面我们已经提到过有关视图的下述观点:由于视图返回的结果集与具有行列结构的表有着相同的表格形式,并且我们可以在SQL 语句中像引用表那样引用视图,所以我们常把视图称为虚表。标准视图的结果集并不以表的形式存储在数据库中,而是在执行引用了视图的查询时,SQL Server 2000 才把相关的基本表中的数据合并成视图的逻辑结构。
    上面的结论常让我们产生这样的焦虑:由于是在执行了引用了视图的查询时,SQL Server 2000 才把相关的基本表中的数据合并成视图的逻辑结构,那么当查询所引用的视图包含大量的数据行或涉及到对大量数据行进行合计运算或连接操作,毋庸置疑,动态地创建视图结果集将给系统带来沉重的负担,尤其是经常引用这种大容量视图。
    解决这一令人头痛问题的方法就是为视图创建聚簇索引,只有这样才会显著地提高系统的性能。当在视图上创建了聚簇索引后,视图的结果集与有聚簇索引的表的数据集一样是存储在数据中的。
    此外,在视图上创建索引还会带来这样的好处;优化器可以在那些在FROM 从句中不直接命名视图的查询中使用视图索引,而且对已存在的视图而言,由于不必重新编写查询代码,从而提高了查询从索引视图中检索数据的效率。
    如果在视图上创建索引,那么视图中的数据会被立即存储在数据库中,对索引视图进行修改,那么这些修改会立即反映到基础表中。同理,对基础表所进行的数据修改也会反映到索引视图那里。索引的惟一性大大提高了SQL Server 查找那些被修改的数据行。
    维护索引视图比维护基础表的索引更为复杂。所以,如果认为值得以因数据修改而增加系统负担为代价来提高数据检索的速度,那么应该在视图上创建索引。在为视图创建索引前,视图本身必须满足以下条件:

  • 在执行CREATE VIEW 命令时,必须将ANSI_NULLS 和QUOTED_IDENTIFIER选项设置为ON 状态;
  • 在使用CREATE TABLE 命令创建索引所引用的基础表时,ANSI_NULLS 选项应设置为ON;
  • 该视图所引用的对象仅包括基础表而不包括其它的视图;
  • 视图所引用的基础表必须与视图同属于同一数据库且有相同的所有者;
  • 在创建视图时必须使用SCHEMABINDING 选项;
  • 如果视图引用了用户自定义函数,那么在创建这些用户自定义函数时也必须使用SCHEMABINDING 选项 ;
  • 视图必须以owner.objectname 的形式来使所引用的表或用户自定义函数;
  • 视图所引用的函数必须是确定性的;
  • 另外值得注意的是,在创建视图的SELECT 语句中不应该包含下面的Transact-SQL语法;
  • SELECT 语句中不能使用*或tablename.*来定义列,必须直接给出列名,否则不可以;
  • 表示行集合的函数;
  • UNION、 DISTINCT、 TOP、 ORDER BY、 COMPUTE、 COMPUTE BY、COUNT(*) 等;
  • AVG、 MAX、 MIN、 STDEV、 STDEVP、 VAR 和VARP 等合计运算函数。
    通常而言,可以在视图上创建多个索引,但是应该记住,在视图上所创建的第一个索引必须是聚簇索引,然后才可以创建其它的非聚簇索引。
    在第八章我们已经详细介绍了CREATE INDEX 命令但是如果准备为视图创建索引那么在执行该命令以前您必须确保以下条件否则创建将会失败。
  • CREATE INDEX 命令的执行者必须是视图的所有者;
  • 在执行创建索引命令期间,ANSI_NULLS、 ANSI_PADDING、 ANSI_WARNINGS、ARITHABORT、 CONCAT_NULL_YIELDS_NULL、 QUOTED_IDENTIFIERS 诸选项应被设置成ON 状态;
  • NUMERIC_ROUNDABORT 选项被设置为OFF 状态;
  • 视图不能包括text、 ntext、 image 类型的数据列;
  • 如果视图的SELECT 语句中包含ORDER BY 选项,则聚簇索引的关键值只能是ORDER BY 从句中所定义的数据列。

    在视图上创建了索引之后,如果打算修改视图数据,则应该保证修改时的选项设置与创建索引时的选项设置一样,否则SQL Server 将产生错误信息,并回滚所做的INSERT、UPDATE 和DELETE 操作。

时间: 2024-10-31 12:28:22

索引视图的相关文章

SQL Server:创建索引视图

server|创建|视图|索引 视图也称为虚拟表,这是因为由视图返回的结果集其一般格式与由列和行组成的表相似,并且,在 SQL 语句中引用视图的方式也与引用表的方式相同.标准视图的结果集不是永久地存储在数据库中.查询每次引用视图时,Microsoft SQL Server 2000 会动态地将生成视图结果集所需的逻辑合并到从基表数据生成完整查询结果集所需的逻辑中.生成视图结果的过程称为视图具体化.有关更多信息,请参见视图解析. 对于标准视图而言,为每个引用视图的查询动态生成结果集的开销很大,特别

通过 SQL Server 2005 索引视图提高性能

本文介绍了 SQL Server 2005 Enterprise Edition 中经过改进的索引视图功能.文中对索引视图进行了说明介绍,并讨论了可通过该功能改善性能的一些具体情况 一.索引视图 多年以来,Microsoft SQL Server 一直支持创建称为视图的虚拟表.通常,这些视图的主要作用是: • 提供一种安全机制,将用户限制到一个或多个基表的某个数据子集中. • 提供一种机制,允许开发人员自定义用户通过逻辑方式查看存储在基表中的数据的方式. 通过 SQL Server 2000,S

用 SQL Server 2000 索引视图提高性能

server|视图|索引|性能 什么是索引视图? 许多年来,Microsoft SQL Server 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某个子集. 提供一种机制,允许开发人员定制用户如何才能以逻辑方式查看存储在基表中的数据. SQL Server 2000 已经扩展了 SQL Server 视图的功能,以提高系统性能.它可以在一个视图上创建唯一的群集索引和非群集索引,可以改进最复杂查询的数据访问性能.在 S

用SQLServer2000索引视图提高性能(下)

server|sqlserver|视图|索引|性能 使用"索引微调向导" "索引微调向导"除建议使用基表的索引之外,还建议使用索引视图.使用该向导可提高管理员确定索引和索引视图相结合的能力,从而优化针对数据库执行的典型混合查询的性能. 由于"索引微调向导"强制使用所有必需的 SET 选项(以确保结果集的正确性),其索引视图将会成功创建.不过,如果您的应用程序的选项没有按照要求设置,可能无法利用这些视图.对那些参与索引视图定义的表执行的插入.更新或

用SQL Server 2005索引视图提高性能二

视图限制 如要在 SQL Server 2005 中的视图上创建一个索引,相应的视图定义必须包含: ANY.NOT ANY OPENROWSET.OPENQUERY.OPENDATASOURCE 不精确的(浮型.实型)值上的算术 OPENXML COMPUTE.COMPUTE BY ORDER BY CONVERT 生成一个不精确的结果 OUTER 联接 COUNT(*) 引用带有一个已禁用的聚集索引的基表 GROUP BY ALL 引用不同数据库中的表或函数 派生的表(FROM 列表中的子查询

用SQL Server 2005索引视图提高性能一

一.索引视图 多年以来,MicrosoftSQL Server一直支持创建称为视图的虚拟表.通常,这些视图的主要作用是: 提供一种安全机制,将用户限制到一个或多个基表的某个数据子集中. 提供一种机制,允许开发人员自定义用户通过逻辑方式查看存储在基表中的数据的方式. 通过 SQL Server 2000,SQL Server 视图的功能得到了扩展,实现了系统性能方面的收益.可在视图上创建唯一的聚集索引及非聚集索引,来提高最复杂的查询的数据访问性能.在 SQL Server 2000 和 2005

MS SQL基础教程:索引视图

在前面我们已经提到过有关视图的下述观点:由于视图返回的结果集与具有行列结构的表有着相同的表格形式,并且我们可以在SQL 语句中像引用表那样引用视图,所以我们常把视图称为虚表.标准视图的结果集并不以表的形式存储在数据库中,而是在执行引用了视图的查询时,SQL Server 2000 才把相关的基本表中的数据合并成视图的逻辑结构. 上面的结论常让我们产生这样的焦虑:由于是在执行了引用了视图的查询时,SQL Server 2000 才把相关的基本表中的数据合并成视图的逻辑结构,那么当查询所引用的视图包

使用SQL Server 2000索引视图提高性能

本文介绍 SQL Server 2000 企业版的新功能 - 索引视图.讲解索引视图并讨论一些提高性能的具体方案. 什么是索引视图? 许多年来,Microsoft SQL Server 一直都提供创建虚拟表(称为视图)的功能.在过去,这些视图主要有两种用途: 提供安全机制,将用户限制在一个或多个基表中的数据的某个子集. 提供一种机制,允许开发人员定制用户如何才能以逻辑方式查看存储在基表中的数据. SQL Server 2000 已经扩展了 SQL Server 视图的功能,以提高系统性能.它可以

SQL Server中用索引视图查看性能状况

在SQL Server中,视图是一个保存的T-SQL查询.视图定义由SQL Server保存,以便它能够用作一个虚拟表来简化查询,并给基表增加另一层安全.但是,它并不占用数据库的任何空间.实际上,在你查询它之前,视图并不做任何事情. 索引视图 在SQL Server 2000和2005中,你能够给视图增加索引.但是,如果视图只是一个保存在数据库中的查询定义,在运行前没有自己的数据,你如何给那个定义建立一个索引呢?嗯,这比较麻烦. 索引视图是一个已被物化或保存在数据库中的视图.当基本表更新时,给视