• 沙里软件

  • ShaliSoft.com [手机站]   办公桌收纳抽屉
  • 首页
  • 博文
  • 演示
  • 管理
  • 索引视图允许使用的规则

    网络   2014/9/10 9:25:57

    在视图上创建索引的另一个好处是:查询优化器开始在查询中使用视图索引,而不是直接在 FROM 子句中命令视图。这样一来,可从索引视图检索数据而无需重新编码,由此带来的高效率也使现有查询获益。在视图上创建的第一个索引必须是唯一聚集索引。在创建唯一聚集索引后,可创建其它非聚集索引。视图上的索引命名规则与表上的索引命名规则相同。唯一区别是表名由视图名替换。(Sql Server联机帮助)

    没研究过,说不出什么东西来,现在只把方法记下来。

    语句:

    Create VIEW vXXX WITH SCHEMABINDING AS…… 

    Create UNIQUE CLUSTERED INDEX idxXXX ON vXXX(cXXX)

    一个标准视图转换为一个索引视图必须遵守以下规则:

    A.视图必须使用With Schemabinding选项来创建;

          如果创建视图时没有with Schemabinding,试图创建视图时就会报错:……因为该视图未绑定到架构

    B.在这个视图中不能使用其他视图、导出表、行集函数或自查询,也就是说只能使用表;

    C.视图所用到的基本表必须和视图属于同一个所有者;

    D.'视图只能链接同一个数据库中的表;'

    E.'视图不能包含一个外部链接或自链接,也就是说在链接表时只能使用INNER JOIN并且INNER JOIN前后不能使同一个表,不能使用LEFT(RIGHT) JOIN 或者 LEFT (RIGHT) OUTER JOIN ;'

    F. '视图不能包含UNION子句、TOP子句、ORDER BY子句、Having子句、Rollup子句、Cube子句、compute子句、Compute By子句或Distinct关键字;'

    G. '视图不允许使用某些集合函数,如:Count(*)可以使用count_big(*)代替、avg()、max()、min()、stdev()、stdevp()、var()或varp()等;'

    H. '视图不能使用Select * 这样的语句,也就是说视图的所有字段都必须显示指定;'

    I. 视图不能包含Text、ntext、image类型的列;

    J. 如果视图包含一个Group By子句,那么他必须在Select列中包含count_big(*);

    K. 视图中的所有标和用户自定义的函数都必须使用两段式名来引用,即所有者.表或函数名称;

    L. 所有的基本表和视图都必须使用 Set Ansi_Nulls On 创建;

    M. 在创建索引时或创建索引后执行IUD时,必须显示或隐式地执行:

            Set ANSI_NULLS ON

            SET ANSI_PADDING ON

            SET ANSI_WARNINGS ON

            SET ARITHABORT ON

            SET CONCAT_NULL_YIELDS_NULL ON

            SET QUOTED_IDENTIFIER ON

            SET NUMERIC_ROUNDABORT OFF

            各个选项的有关信息或意义,可以查阅SQL Server的联机丛书,这里就不再介绍了;

    N. 索引视图只有在SQL Server2000的企业版或开发版或者更高的版本中才能创建。

     

    在一个表上创建了索引视图后,对其执行delete操作时报错:Delete 失败,因为下列 SET 选项的设置不正确: 'CONCAT_NULL_YIELDS_NULL, ANSI_PADDING,ARITHABORT',删除这个视图问题就解决了

     

     

    '想创建索引来提高效率的话,就专门创建一张数据表,对数据表创建索引'





    消息提示已经给你答案了,你可以考虑用表连接代替子查询。

     

    以下是在视图上建索引的规则,无法改变的:   

    定义索引视图的 SELECT 语句不得包含 TOP、DISTINCT、COMPUTE、HAVING 和 UNION 关键字。也不能包含子查询。

     

    SELECT 列表中不得包含星号 (*)、'table.*' 通配符列表、DISTINCT、COUNT(*)、COUNT(<expression>)、基表中的计算列和标量聚合。 

     

    非聚合 SELECT 列表中不能包含表达式。聚合 SELECT 列表(包含 GROUP BY 的查询)中可能包含 SUM 和 COUNT_BIG(<expression>);它一定包含 COUNT_BIG(*)。不允许有其它聚合函数(MIN、MAX、STDEV,...)。

     

    使用 AVG 的复杂聚合无法参与索引视图的 SELECT 列表。不过,如果查询使用这样的聚合,则优化程序将能使用该索引视图,用 SUM 和 COUNT_BIG 的简单聚合组合代替 AVG。

     

    若某列是从取值为 float 数据类型或使用 float 表达式进行取值的表达式得到的,则不能作为索引视图或表中计算列的索引键。这样的列被视为是不精确的。使用 COLUMNPROPERTY 函数决定特定计算列或视图中的列是否精确。

     

    索引视图受限于以下的附加限制: 

     

    索引的创建者必须拥有表。所有表、视图和索引必须在同一数据库中创建。

     

    定义索引视图的 SELECT 语句不得包含视图、行集函数、行内函数或派生表。同一物理表在该语句中只能出现一次。

     

    在任何联接表中,均不允许进行 OUTER JOIN 操作。

     

    搜索条件中不允许使用子查询或者 CONTAINS 或 FREETEXT 谓词。


    阅读(1167) 分享(0)

    上一篇: 意外错误. 外部对象中发生了可捕获的错误(C0000005)。脚本无法继续执行。。
    下一篇: SQL Server 未将服务器配置成"RPC"的问题解决 Rpc out 作用

  • 精彩推荐

    ◆ 安装完office后 在组件服务里DCOM配置中找不到
    ◆ 微信清缓存工具,微信怎么清理缓存?
    ◆ 用回溯法解决子集和问题【C#版本】
    ◆ 实测什么物体会影响WIFI信号
    ◆ 利用UC微信分享接口进行WEB微信分享
    ◆ ASP.NET之GridView Eval() 中数据格式化或格式化数据
    ◆ css常用hack语法
    ◆ 面向对象的缺点,你了解了吗
    ◆ 我国首台可人脸识别ATM机发布 不刷脸不能取钱
    ◆ 2G网络要关闭了吗?你还不打算换4G手机?
  • 用心做事 不能唯利是图

    • 吊儿
    • 用QQ联系我17905772
  • 搜索


  • 最新文章

    • 导出Excel 格式 mso-number-format
    • 服务器iis支持tls1.2,windows server 2008 r2 中IIS启用TLS 1.2(安装SSL后用TLS 1.2)
    • MySQL配置优化
    • EditPlus 添加文件比较工具winmerge
    • 滚动悬浮固定JS特效

  • 热门文章

    • php sso单点登录实现代码
    • 中国菜刀(China chopper) 最新黑客工具
    • redis.conf中文版(基于2.4)
    • 搜索引擎名单大全
    • php图片上传类,支持加水印,生成略缩图

  • 最新图库


  • 最新评论


  • 友情链接

  • 沙里软件

  • 最近访客

    Powered by ShaliSoft.com 豫ICP备13008529号

    免责声明:本站部分内容来源于互联网,转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,不为其版权负责,也不构成任何其他建议。如果发现侵犯版权,联系QQ17905772进行删除。