视图索引

视图索引创建索引视图  视图也称为虚拟表,这是因为由视图返回的结果集其一般格式与由列和行组成的表相似,并且,在 SQL 语句中引用视图的方式也与引用表的方式相同。标准视图的结果集不是永久地存储在数据库中。查询每次引用视图时,Microsoft® SQL Server™ 2000 会动态地将生成视图结果集所需的逻辑合并到从基表数据生成完整查询结果集所需的逻辑

大家好,又见面了,我是你们的朋友全栈君。创建索引视图  

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

   

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

   

   

   

  说明     只有安装了   Microsoft   SQL   Server   2000   企业版或   Microsoft   SQL   Server   2000   开发版,才可以创建索引视图。  

   

   

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

   

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

   

  与基表上的索引相比,对索引视图的维护可能更复杂。只有当视图的结果检索速度的效益超过了修改所需的开销时,才应在视图上创建索引。这样的视图通常包括映射到相对静态的数据上、处理多行以及由许多查询引用的视图。  

   

  视图的要求  

  在视图上创建聚集索引之前,该视图必须满足下列要求:    

   

  当执行   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,   AVG(ColumnA),   ColumnA   +   Column   B   AS   AddColAColB  

   

  SELECT   SUM(ColumnA),   ColumnA   %   ColumnB   AS   ModuloColAColB  

   

  派生表。  

   

   

  行集函数。  

   

   

  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   函数。  

   

   

  全文谓词   CONTAINS   或   FREETEXT。  

   

   

  COMPUTE   或   COMPUTE   BY   子句。    

  如果没有指定   GROUP   BY,则视图选择列表不能包含聚合表达式。  

   

   

  如果指定了   GROUP   BY,则视图选择列表必须包含   COUNT_BIG(*)   表达式,并且,视图定义不能指定   HAVING、CUBE   或   ROLLUP。  

   

   

  通过一个既可以取值为   float   值也可以使用   float   表达式求值的表达式而生成的列不能作为索引视图或表的索引的键。    

  CREATE   INDEX   语句的要求  

  在视图上创建的第一个索引必须是唯一聚集索引。在创建唯一聚集索引后,可创建其它非聚集索引。视图上的索引命名规则与表上的索引命名规则相同。唯一区别是表名由视图名替换。有关更多信息,请参见   CREATE   INDEX。  

   

  除了一般的   CREATE   INDEX   要求外,CREATE   INDEX   语句还必须满足下列要求:    

   

  执行   CREATE   INDEX   语句的用户必须是视图的所有者。  

   

   

  当执行   CREATE   INDEX   语句时,下列   SET   选项必须设置为   ON:    

  ANSI_NULLS  

   

   

  ANSI_PADDING  

   

   

  ANSI_WARNINGS  

   

   

  ARITHABORT  

   

   

  CONCAT_NULL_YIELDS_NULL  

   

   

  QUOTED_IDENTIFIERS    

  必须将选项   NUMERIC_ROUNDABORT   选项设置为   OFF。  

   

   

  视图不能包含   text、ntext   或   image   列,即使在   CREATE   INDEX   语句中没有引用它们。  

   

   

  如果视图定义中的   SELECT   语句指定了一个   GROUP   BY   子句,则唯一聚集索引的键只能引用在   GROUP   BY   子句中指定的列。    

  注意事项  

  创建聚集索引后,对于任何试图为视图修改基本数据而进行的连接,其选项设置必须与创建索引所需的选项设置相同。如果这个执行语句的连接没有适当的选项设置,则   SQL   Server   生成错误并回滚任何会影响视图结果集的   INSERT、UPDATE   或   DELETE   语句。有关更多信息,请参见影响结果的   SET   选项。  

   

  若除去视图,视图上的所有索引也将被除去。若除去聚集索引,视图上的所有非聚集索引也将被除去。可分别除去非聚集索引。除去视图上的聚集索引将删除存储的结果集,并且优化器将重新象处理标准视图那样处理视图。  

   

  尽管   CREATE   UNIQUE   CLUSTERED   INDEX   语句仅指定组成聚集索引键的列,但视图的完整结果集将存储在数据库中。与基表上的聚集索引一样,聚集索引的   B   树结构仅包含键列,但数据行包含视图结果集中的所有列。  

   

  若想为现有系统中的视图添加索引,必须计划绑定任何想要放入索引的视图。可以:    

   

  除去视图并通过指定   WITH   SCHEMABINDING   重新创建它。  

   

   

  创建另一个视图,使其具有与现有视图相同的文本,但是名称不同。优化器将考虑新视图上的索引,即使在查询的   FROM   子句中没有直接引用它。    

   

   

  说明     不能除去参与到用   SCHEMABINDING   子句创建的视图中的表或视图,除非该视图已被除去或更改而不再具有架构绑定。另外,如果对参与具有架构绑定的视图的表执行   ALTER   TABLE   语句,而这些语句又会影响视图定义,则这些语句将会失败。  

   

   

  必须确保新视图满足索引视图的所有要求。这可能需要更改视图及其所引用的所有基表的所有权,以便它们都为同一用户所拥有。  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163009.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月22日 下午6:00
下一篇 2022年7月22日 下午6:00


相关推荐

  • Java实习生面试题汇总

    Java实习生面试题汇总大三学生实习面试题真题汇总

    2026年3月18日
    1
  • 特殊符号大全复制_特殊符号大全爱好者工具讲解[通俗易懂]

    特殊符号大全复制_特殊符号大全爱好者工具讲解[通俗易懂]前言:明天将会举办第2期微信昵称悬赏令,第1期结果已公布,如果您还没准备好,可以先准备一下哦。下面是第1期的结果放榜-微悬令第1期活动结束,奖金会陆续发放给获奖同学!漂亮的网名昵称符号让我们在游戏或者其它平台里面显得与众不同,为了实现这样的目标,小编制作了网名在线生成器,这是一整套的工具,可以让我们快速定制出与众不同的符号特殊符号大全爱好者首先我们打开昵称符号加字器,这是个非常有用的网名…

    2022年6月11日
    97
  • 感知机分析

    感知机分析关于感知机okletsgo。感知机是线性分类模型,划重点注意哦,是线性的分类模型。也就是说,如果你拿感知机去分类线性不可分的数据集的话,它的效果想必垂泪。因为近期看到相关算法的缘故来写一片感知机的文章,主要介绍一下这是个什么东西以及它能用来干什么。就我来说最考试接触到感知机是在学习神经网络的时候,神经网络中的每一个点就能看做是一个感知机。上图大概就是感知机的构造了。了解神经…

    2022年10月21日
    6
  • 谷歌为什么被中国赶出去_护士失误事件

    谷歌为什么被中国赶出去_护士失误事件

    腾讯科技讯(中涛)北京时间12月22日消息,美国知名IT杂志《eWeek》网络版今天刊文称,虽然谷歌多项产品在2010年期间取得了市场成功,但同样也出现了不少市场失误。不仅如此,由于谷歌知名度的提高,该公司还遭到了欧盟等监管部门的反垄断调查。《eWeek》为此评出了谷歌2010年十大产品失误和开局不利事件,其中包括谷歌街景收集用户上网隐私信息受指责、Buzz社交网络服务遭批评、没能成功收购美国团购网站Groupon等等。
    《eWeek》认为,在谷歌创建以来的12年当中,20

    2022年10月9日
    5
  • 什么是宿主机?_esxi宿主机

    什么是宿主机?_esxi宿主机就是主机,这个概念是相对于子机而言的,比如你安装有虚拟机的话,那么相对于虚拟机而言,你正在使用的计算机就是宿主机,虚拟机是安装在主机上的,必须在主机上才能运行,主机就是一个“宿主”。…

    2022年4月19日
    207
  • RTCM 协议学习

    RTCM 协议学习文章目录 RTCM 协议介绍 RTCM 格式说明 RTCM 格式 RTCM 数据格式 RTCM 常用的电文类型 Q1 RTCM 数据丢历元 Q2 差分数据不能识别 RTCM 协议解读 RTCM 报文解读示例问题其他资料 RTCM 协议 https blog csdn net xingeaihaozh article details RTCM 协议介绍由国际海运事业无线电技术委员会 RadioTechnic 制定的 RTCMSC10403

    2026年3月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号