:创建索引视图

来源:互联网 发布:福建弘扬妇幼软件 编辑:程序博客网 时间:2024/06/05 03:40
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>

视图也称为虚拟表,这是因为由视图返回的结果集其一般格式与由列和行组成的表相似,并且,在SQL语句中引用视图的方式也与引用表的方式相同。标准视图的结果集不是永久地存储在中。查询每次引用视图时,Microsoft®SQLServer™2000会动态地将生成视图结果集所需的逻辑合并到从基表数据生成完整查询结果集所需的逻辑中。生成视图结果的过程称为视图具体化。有关更多信息,请参见视图解析。

对于标准视图而言,为每个引用视图的查询动态生成结果集的开销很大,特别是对于那些涉及对大量行进行复杂处理(如聚合大量数据或联接许多行)的视图更为可观。若经常在查询中引用这类视图,可通过在视图上创建唯一聚集索引来提高性能。在视图上创建唯一聚集索引时将执行该视图,并且结果集在数据库中的存储方式与带聚集索引的表的存储方式相同。

说明  只有安装了MicrosoftSQLServer2000企业版或MicrosoftSQLServer2000开发版,才可以创建索引视图



在视图上创建索引的另一个好处是:查询优化器开始在查询中使用视图索引,而不是直接在FROM子句中命名视图。这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。有关更多信息,请参见在视图上使用索引。

在视图上创建聚集索引可存储创建索引时存在的数据。索引视图还自动反映自创建索引后对基表数据所做的更改,这一点与在基表上创建的索引相同。当对基表中的数据进行更改时,索引视图中存储的数据也反映数据更改。视图的聚集索引必须唯一,从而提高了SQLServer在索引中查找受任何数据更改影响的行的效率。

与基表上的索引相比,对索引视图的维护可能更复杂。只有当视图的结果检索速度的效益超过了修改所需的开销时,才应在视图上创建索引。这样的视图通常包括映射到相对静态的数据上、处理多行以及由许多查询引用的视图。
视图的要求
在视图上创建聚集索引之前,该视图必须满足下列要求:当执行CREATEVIEW语句时,ANSI_NULLS和QUOTED_IDENTIFIER选项必须设置为ON。OBJECTPROPERTY函数通过ExecIsAnsiNullsOn或ExecIsQuotedIdentOn属性为视图报告此信息。

为执行所有CREATETABLE语句以创建视图引用的表,ANSI_NULLS选项必须设置为ON。

视图不能引用任何其它视图,只能引用基表。

视图引用的所有基表必须与视图位于同一个数据库中,并且所有者也与视图相同。

必须使用SCHEMABINDING选项创建视图。SCHEMABINDING将视图绑定到基础基表的架构。

必须已使用SCHEMABINDING选项创建了视图中引用的用户定义的函数。

表和用户定义的函数必须由2部分的名称引用。不允许使用1部分、3部分和4部分的名称。

视图中的表达式所引用的所有函数必须是确定性的。OBJECTPROPERTY函数的IsDeterministic属性报告用户定义的函数是否是确定性的。有关更多信息,请参见确定性函数和非确定性函数。

视图中的SELECT语句不能包含下列Transact-SQL语法元素:选择列表不能使用*或table_name.*语法指定列。必须显式给出列名。

不能在多个视图列中指定用作简单表达式的表的列名。如果对列的所有(或只有一个例外)引用是复杂表达式的一部分或是函数的一个参数,则可多次引用该列。例如,下列选择列表是非法的:
SELECTColumnA,ColumnB,ColumnA

下列选择列表是合法的:

SELECTColumnA,AVG(ColumnA),ColumnA+ColumnBASAddColAColBSELECTSUM(ColumnA),ColumnA%ColumnBASModuloColAColB
派生表。

行集函数。

UNION运算符。

子查询。

外联接或自联接。

TOP子句。

ORDERBY子句。

DISTINCT关键字。

COUNT(*)(允许COUNT_BIG(*)。)
AVG、MAX、MIN、STDEV、STDEVP、VAR或VARP聚合函数。如果在引用索引视图的查询中指定AVG、MAX、MIN、STDEV、STDEVP、VAR或VARP,如果视图选择列表包含以下替换函数,则优化器会经常计算需要的结果。复杂聚合函数替代简单聚合函数AVG(X)共2页  1 
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
<script type="text/javascript"><!--google_ad_client = "pub-2947489232296736";/* 160x600, 创建于 08-4-23MSDN */google_ad_slot = "4367022601";google_ad_width = 160;google_ad_height = 600;//--></script><script type="text/javascript"src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
原创粉丝点击