zoukankan      html  css  js  c++  java
  • S2小测--索引--视图

    1.  关于Sql server 视图

      

    视图是一个虚拟表,我们在查询视图的时候,实际上是对基础表的查询。视图不仅可以作为SELECT查询的目标,也可以作为修改语句的目
    标。理论上它可以像普通的物理表一样使用,例如增、删、改、查等,更新视图中的数据实际上是修改原始数据表。当然,当修改视图的时
    候,其实是对基础表的修改,它就好像是一个代理。但因为有许多限制,所以在实际开发中一般视图仅做查询使用。
    从用户角度来看,一个视图是从一个特定的角度来查看数据库中的数据。从数据库系统内部来看,一个视图是由SELECT语句组成的查询定义的
    虚拟 表,是由一张或多张表中的数据组成的。从数据库系统外部来看,视图就如同一张表一样,对表能够进行的一般操作都可以应用于视图,
    例如查询,插入,修改,删除操作等。 在创建视图要注意如下限制: •不能使用COMPUTE或者COMPUTE BY子句 •除非和TOP子句一起使用,否则,不能使用ORDER BY子句 •不能使用INTO关键字 •不能使用OPTION子句 •不能引用临时表和表变量。

    2.  关于索引 

    SQLServer中创建索引有以下两种方式:
    1)使用T-SQL的CREATE INDEX语句
    2)借助Microsoft SQL Server Management Studio

    删除视图应该使用Drop view;Drop table是删除表;Drop index是删除索引;Drop database是删除数据库。
    每张表最多包含1个聚集索引。并且聚集索引会决定记录的物理位置。聚集索引不一定要建立在主键字段上。一张表可以没有任何索引。

    SQLServer中,聚集索引基于数据行的键值,在表内排序和存储这些数据行。每个表只能有一个聚集索引,应为数据行本分只能按一个
    顺序存储。在聚集索引中,表中各行的物理顺序与索引键值的逻辑(索引)顺序相同。聚集索引通常可加快UPDATE和DELETE操作的速度,
    因为这两个操作需要读取大量的数据。创建或修改聚集索引可能要花很长时间,因为执行这两个操作时要在磁盘上对表的行进行重组。


    关系数据库中,主键和索引的区别如下:
    1.主键是索引,但索引不一定是主键。 
    2.主键具有唯一性,而只有唯一性索引才具有唯一性;主键的值不能为空,不能重复。索引可以在程序中动态创建删除。也可以是任何有序的字段。
    如果在一个表中,列A、B、C 被设为主键的情况下,当需要将A,B,C 设为索引时,如果A,B,C被设为主键,数据库自动会建立索引,不需要再创建索引;另外需要对列A,B,C,D,E建立索引时,不能只对D,E建立索引,必须在索引中包含所有的索引列即:A,B,C,D,E。
    为表中某些列创建索引,是在新的空间中保存索引数据,不会影响表中数据行的存储。

    3.索引的缺点
    SQLServer中,创建索引可以提高查询速度。但增加索引也有许多不利的方面。第一,创建索引和维护索引要耗费时间,这种时间随着数据 量的增加而增加。 第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

    4.  聚集索引和非聚集索引的区别
    SQLServer中的索引有两种:聚集索引和非聚集索引。聚集索引和非聚集索引的区别是在物理数据的存储方式上。
    1)聚集索引基于数据行的键值,在表内排序和存储这些数据行。每个表只能有一个聚集索引,应为数据行本分只能按一个顺序存储。在聚集索引中,表中各行的物理顺序与索引键值的逻辑(索引)顺序相同。聚集索引通常可加快UPDATE和DELETE操作的速度,因为这两个操作需要读取大量的数据。创建或修改聚集索引可能要花很长时间,因为执行这两个操作时要在磁盘上对表的行进行重组。
    2)因为一个表中只能有一个聚集索引,如果需要在表中建立多个索引,则可以创建为非聚集索引。表中的数据并不按照非聚集索引列的顺序存储,但非聚集索引的索引行中保存了非聚集键值和行定位器,可以快捷地根据非聚集键的值来定位记录的存储位置。
    无论是聚集索引,还是非聚集索引,都可以是唯一索引。在SQL Server中,当要求表中数据唯一时,可创建唯一索引,但索引列的组合不同于表的主键。多个列组合而成的索引称为复合索引。
    SQLServer的唯一约束与唯一索引是两个不同的概念。唯一约束只是限定了表中指定列的取值必须唯一。而唯一索引在唯一约束的基础上,会按照表中记录指定列值的大小做有序的存储。
    创建索引时要注意:
    1)索引并非越多越好,一个表中如果有大量的索引,不仅占用大量的磁盘空间,而且会影响INSERT、DELETE、UPDATE等语句的性能。因为当表中数据更改的同时,索引也会进行调整和更新。
    2)避免对经常更新的表进行过多的索引,并且索引中的列尽可能少。而对经常用于查询的字段应该创建索引,但要避免添加不必要的字段。
    3)数据量小的表最好不要使用索引,由于数据较少,查询花费的时间可能比遍历索引的时间还要短,索引可能不会产生优化效果。
    4)在条件表达式中经常用到的、不同值较多的列上建立索引,在不同值少的列上不要建立索引。比如在学生表的“性别”字段上只有“男”与“女”两个不同值,因此就无须建立索引。如果建立索引,不但不会提高查询效率,反而会严重降低更新速度。
    5)当唯一性是某种数据本身的特征时,指定唯一索引。使用唯一索引能够确保定义的列的数据完整性,提高查询速度。
    6)在频繁进行排序或分组(即进行GROUPBY或ORDERBY操作)的列上建立索引,如果待排序的列有多个,可以在这些列上建立组合索引。
    
    
     










  • 相关阅读:
    .NET Framework 4 不能先解压再使用setup.exe安装的解决方法
    PNG透明度兼容IE6的方法
    VM虚拟机访问宿主机本地站点
    AU3设置非全局快捷键的函数GUISetAccelerators
    Attempted to serialize java.lang.Class: org.hibernate.proxy.HibernateProxy. Forgot to register a type adapter?
    关于Android Studio gradle build running很久的问题
    不懂积累,你怎么成长
    关于ScrollView里的显示不完问题
    关于DialogFragment里控件无法赋新值问题
    Android上传Base64图片,图片变成黑色一块的问题
  • 原文地址:https://www.cnblogs.com/ckwblogs/p/5767237.html
Copyright © 2011-2022 走看看