Oracle视图中建立索引的注意事项.doc_第1页
Oracle视图中建立索引的注意事项.doc_第2页
Oracle视图中建立索引的注意事项.doc_第3页
Oracle视图中建立索引的注意事项.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle视图中建立索引的注意事项在视图上创建索引需要三个条件:一、视图必须绑定到架构。要做到这点,在CREATEVIEW语句中,必须加上WITHSCHEMABINDING,如果是使用企业管理器,则在设计界面的空白处点击右键,属性,选中“绑定到架构”。二、索引必须是唯一索引。要做到这点,在CREATEINDEX中必须指定UNIQUE。三、索引必须是聚集索引。要做到这点,在CREATEINDEX中必须指定CLUSTERED。例:CREATEVIEWviewFooWITHSCHEMABINDINGASSELECTid.CREATEUNIQUECLUSTEREDINDEXindex_viewFooONviewFoo(id)在视图上创建聚集索引之前,该视图必须满足下列要求:当执行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,COUNT(ColumnA),ColumnA+ColumnBASAddColAColBFROMT1SELECTSUM(ColumnA),ColumnA%ColumnBASModuloColAColB,COUNT_BIG(*)FROMT1GROUPBYColumnA派生表。行集函数。UNION运算符。子查询。外联接或自联接。TOP子句。ORDERBY子句。DISTINCT关键字。COUNT(*)(允许COUNT_BIG(*)。)AVG、MAX、MIN、STDEV、STDEVP、VAR或VARP聚合函数。如果在引用索引视图的查询中指定AVG、MAX、MIN、STDEV、STDEVP、VAR或VARP,如果视图选择列表包含以下替换函数,则优化器会经常计算需要的结果。复杂聚合函数替代简单聚合函数AVG(X)SUM(X),COUNT_BIG(X)STDEV(X)SUM(X),COUNT_BIG(X),SUM(X*2)STDEVP(X)SUM(X),COUNT_BIG(X),SUM(X*2)VAR(X)SUM(X),COUNT_BIG(X),SUM(X*2)VARP(X)SUM(X),COUNT_BIG(X),SUM(X*2)例如,索引视图选择列表不能包含表达式AVG(SomeColumn)。如果视图选择列表包含表达式SUM(SomeColumn)和COUNT_BIG(SomeColumn),则SQLServer可为引用视图并指定AVG(SomeColumn)的查询计算平均数。引用可为空的表达式的SUM函数。全文谓词CONTAINS或FREETEXT。COMPUTE或COMPUTEBY子句。如果没有指定GROUPBY,则视图选择列表不能包含聚合表达式。如果指定了GROUPBY,则视图选择列表必须包含COUNT_BIG(*)表达式,并且,视图定义不能指定HAVING、CUBE或ROLLUP。通过一个既可以取值为float值也可以使用float表达式求值的表达式而生成的列不能作为索引视图或表的索引的键。CREATEINDEX语句的要求在视图上创建的第一个索引必须是唯一聚集索引。在创建唯一聚集索引后,可创建其它非聚集索引。视图上的索引命名规则与表上的索引命名规则相同。唯一区别是表名由视图名替换。有关更多信息,请参见CREATEINDEX。除了一般的CREATEINDEX要求外,CREATEINDEX语句还必须满足下列要求:执行CREATEINDEX语句的用户必须是视图的所有者。当执行CREATEINDEX语句时,下列SET选项必须设置为ON:ANSI_NULLSANSI_PADDINGANSI_WARNINGSARITHABORTCONCAT_NULL_YIELDS_NULLQUOTED_IDENTIFIERS必须将选项NUMERIC_ROUNDABORT选项设置为OFF。视图不能包含text、ntext或image列,即使在CREATEINDEX语句中没有引用它们。如果视图定义中的SELECT语句指定了一个GROUPBY子句,则唯一聚集索引的键只能引用在GROUPBY子句中指定的列。注意事项创建聚集索引后,对于任何试图为视图修改基本数据而进行的连接,其选项设置必须与创建索引所需的选项设置相同。如果这个执行语句的连接没有适当的选项设置,则SQLServer生成错误并回滚任何会影响视图结果集的INSERT、UPDATE或DELETE语句。有关更多信息,请参见影响结果的SET选项。若除去视图,视图上的所有索引也将被除去。若除去聚集索引,视图上的所有非聚集索引也将被除去。可分别除去非聚集索引。除去视图上的聚集索引将删除存储的结果集,并且优化器将重新象处理标准视图那样处理视图。尽管CREATEUNIQUECLUSTEREDINDEX语句仅指定组成聚集索引键的列,但视图的完整结果集将存储在数据库中。与基表上的聚集索引一样,聚集索引的B树结构仅包含键列,但数据行包含视图结果集中的所有列。若想为现有系统中的视图添加索引,必须计划绑定任何想要放入索引的视图。可以:除去视图并通过指定WITHSCHEMABINDING重新创建它。创建另一个视图,使其具有与现有视图相同的文本,但是名称不同。优化器将考虑新视图上的索引,即使在查询的FROM子句中没有直接引用它。说明不能除去参与到用SCHEMABINDING子句

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论