当前位置:七道奇文章资讯数据防范MSSQL防范
日期:2011-05-02 15:22:00  来源:本站整理

SQL Server数据库技术(89)[MSSQL防范]

赞助商链接



  本文“SQL Server数据库技术(89)[MSSQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
???在前面我们已经提到过有关视图的下述概念:由于视图返回的后果集与具有行列构造的表有着相同的表格情势,并且我们可以在SQL 语句中像引用表那样引用视图,所以我们常把视图称为虚表.尺度视图的后果集并不以表的情势存储在数据库中,而是在履行引用了视图的查询时,sql server 2000 才把相关的基本表中的数据归并成视图的逻辑构造.
????上面的结论常让我们产生这样的焦虑:由于是在履行了引用了视图的查询时,SQL Server 2000 才把相关的基本表中的数据归并成视图的逻辑构造,那么当查询所引用的视图包含大量的数据行或触及到对大量数据行举行合计运算或衔接操作,毋庸置疑,动态地成立视图后果集将给系统带来沉重的负担,特别是常常引用这种大容量视图.
????办理这一令人头痛问题的办法就是为视图成立聚簇索引,只有这样才会明显地提高系统的性能.当在视图上成立了聚簇索引后,视图的后果集与有聚簇索引的表的数据集一样是存储在数据中的.
????此外,在视图上成立索引还会带来这样的好处;优化器可以在那些在FROM 从句中不直接命名视图的查询中利用视图索引,并且对已存在的视图而言,由于没必要重新编写查询代码,从而提高了查询从索引视图中检索数据的效率.
????假如在视图上成立索引,那么视图中的数据会被当即存储在数据库中,对索引视图举行改正,那么这些改正会当即反映到底子表中.同理,对底子表所举行的数据改正也会反映到索引视图那边.索引的惟一性大大提高了SQL Server 查找那些被改正的数据行.
????保护索引视图比保护底子表的索引更为复杂.所以,假如认为值得以因数据改正而增添系统负担为代价来提高数据检索的速度,那么应当在视图上成立索引.在为视图成立索引前,视图本身必须满意以下条件:
  • 在履行CREATE VIEW 号令时,必须将ANSI_NULLS 和QUOTED_IDENTIFIER选项设置为ON 状况;
  • 在利用CREATE TABLE 号令成立索引所引用的底子表时,ANSI_NULLS 选项应设置为ON;
  • 该视图所引用的对象仅包含底子表而不包含别的的视图;
  • 视图所引用的底子表必须与视图同属于同一数据库且有相同的全部者;
  • 在成立视图时必须利用SCHEMABINDING 选项;
  • 假如视图引用了用户自定义函数,那么在成立这些用户自定义函数时也必须利用SCHEMABINDING 选项 ;
  • 视图必须以owner.objectname 的情势来使所引用的表或用户自定义函数;
  • 视图所引用的函数必须是肯定性的;
  • 别的值得注意的是,在成立视图的SELECT 语句中不该该包含下面的Transact-SQL语法;
  • SELECT 语句中不能利用*或tablename.*来定义列,必须直接给出列名,不然不可以;
  • 表示行调集的函数;
  • UNION、 DISTINCT、 TOP、 ORDER BY、 COMPUTE、 COMPUTE BY、COUNT(*) 等;
  • AVG、 MAX、 MIN、 STDEV、 STDEVP、 VAR 和VARP 等合计运算函数.
    普通而言,可以在视图上成立多个索引,但是应当记着,在视图上所成立的第一个索引必须是聚簇索引,然后才可以成立别的的非聚簇索引.
    在第八章我们已经具体介绍了CREATE INDEX 号令但是假如预备为视图成立索引那么在履行该号令从前您必须确保以下条件不然成立将会失利.
  • CREATE INDEX 号令的履行者必须是视图的全部者;
  • 在履行成立索引号令期间,ANSI_NULLS、 ANSI_PADDING、 ANSI_WARNINGS、ARITHABORT、 CONCAT_NULL_YIELDS_NULL、 QUOTED_IDENTIFIERS 诸选项应被设置成ON 状况;
  • NUMERIC_ROUNDABORT 选项被设置为OFF 状况;
  • 视图不能包含text、 ntext、 image 范例的数据列;
  • 假如视图的SELECT 语句中包含ORDER BY 选项,则聚簇索引的关键值只能是ORDER BY 从句中所定义的数据列.

????在视图上成立了索引之后,假如打算改正视图数据,则应当保证改正时的选项设置与成立索引时的选项设置一样,不然SQL Server 将产生错误信息,并回滚所做的INSERT、UPDATE 和DELETE 操作.

?

  以上是“SQL Server数据库技术(89)[MSSQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • Windows 搭配 IIS7 PHP MySQL 环境
  • sqlserver索引的原理及索引成立的注意事项小结
  • SQL Join的一些总结(实例)
  • SQL的Join利用图解教程
  • SQL中JOIN和UNION辨别、用法及示例介绍
  • 关于SQL中CTE(公用表表达式)(Common Table Expression)的总结
  • mysql Out of memory (Needed 16777224 bytes)的错误办理
  • mysql提醒[Warning] Invalid (old?) table or database name问题的办理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • mysql启用skip-name-resolve情势时呈现Warning的处理办法
  • MySQL Order By语法介绍
  • <b>MySQL ORDER BY 的实现解析</b>
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .