oracle 视图能建索引吗,Oracle视图中建立索引注意事项.doc

Oracle视图中建立索引的注意事项

在视图上创建索引需要三个条件:一、视图必须绑定到架构。要做到这点,在?CREATE?VIEW?语句中,必须加上?WITH?SCHEMABINDING,如果是使用企业管理器,则在设计界面的空白处点击右键,属性,选中“绑定到架构”。二、索引必须是唯一索引。要做到这点,在?CREATE?INDEX?中必须指定?UNIQUE。三、索引必须是聚集索引。要做到这点,在?CREATE?INDEX?中必须指定?CLUSTERED。例:CREATE?VIEW?viewFoo?WITH?SCHEMABINDINGAS

在视图上创建聚集索引之前,该视图必须满足下列要求:?????????当执行?CREATE?VIEW?语句时,ANSI_NULLS?和?QUOTED_IDENTIFIER?选项必须设置为?ON。OBJECTPROPERTY?函数通过?ExecIsAnsiNullsOn?或?ExecIsQuotedIdentOn?属性为视图报告此信息。?????????为执行所有?CREATE?TABLE?语句以创建视图引用的表,ANSI_NULLS?选项必须设置为?ON。?????视图不能引用任何其它视图,只能引用基表。?????????视图引用的所有基表必须与视图位于同一个数据库中,并且所有者也与视图相同。?????????必须使用?SCHEMABINDING?选项创建视图。SCHEMABINDING?将视图绑定到基础基表的架构。?????????必须已使用?SCHEMABINDING?选项创建了视图中引用的用户定义的函数。?????????表和用户定义的函数必须由?2?部分的名称引用。不允许使用?1?部分、3?部分和?4?部分的名称。?????????视图中的表达式所引用的所有函数必须是确定性的。OBJECTPROPERTY?函数的?IsDeterministic?属性报告用户定义的函数是否是确定性的。有关更多信息,请参见确定性函数和非确定性函数。?????????视图中的?SELECT?语句不能包含下列?Transact-SQL?语法元素:?????选择列表不能使用?*?或?table_name.*?语法指定列。必须显式给出列名。?????????不能在多个视图列中指定用作简单表达式的表的列名。如果对列的所有(或只有一个例外)引用是复杂表达式的一部分或是函数的一个参数,则可多次引用该列。例如,下列选择列表是非法的:?????SELECT?ColumnA,?ColumnB,?ColumnA?????????下列选择列表是合法的:?????????SELECT?ColumnA,?COUNT(ColumnA),?ColumnA?+?Column?B?AS?AddColAColB?FROM?T1?????????SELECT?SUM(ColumnA),?ColumnA?%?ColumnB?AS?ModuloColAColB,?COUNT_BIG(*)?FROM?T1?GROUP?BY?ColumnA?????????派生表。???行集函数。???UNION?运算符。???子查询。??外联接或自联接。????TOP?子句。???ORDER?BY?子句。??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),则?SQL?Server?可为引用视图并指定?AVG(SomeColumn)?的查询计算平均数。?????引用可为空的表达式的?SUM?函数。?????

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值