视图的概念
视图是原始数据库数据的一种变换,是查看表中数据的另外一种
方式。可以将视图看成是一个移动的窗口,通过它可以看到感兴趣的数据。
视图是从一个或多个实际表中获得的,这些表的数据存放在数据
库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从
另一个视图中产生。
视图的定义存在数据库中,与此定义相关的数据并没有再存一份
于数据库中。通过视图看到的数据存放在基表中。
视图看上去非常象数据库的物理表,对它的操作同任何其它的表
一样。当通过视图修改数据时,实际上是在改变基表中的数据;相反
地,基表数据的改变也会自动反映在由基表产生的视图中。由于逻辑
上的原因,有些视图可以修改对应的基表,有些则不能(仅仅能查询)。
视图的作用
简单性。看到的就是需要的。视图不仅可以简化用户对数据的理
解,也可以简化他们的操作。那些被经常使用的查询可以被定义为视图,
从而使得用户不必为以后的操作每次指定全部的条件。
安全性。通过视图用户只能查询和修改他们所能见到的数据。数
据库中的其它数据则既看不见也取不到。数据库授权命令可以使每个用
户对数据库的检索限制到特定的数据库对象上,但不能授权到数据库特
定行和特定的列上。通过视图,用户可以被限制在数据的不同子集上:
- 使用权限可被限制在基表的行的子集上。
- 使用权限可被限制在基表的列的子集上。
- 使用权限可被限制在基表的行和列的子集上。
- 使用权限可被限制在多个基表的连接所限定的行上。
- 使用权限可被限制在基表中的数据的统计汇总上。
- 使用权限可被限制在另一视图的一个子集上,或是一些视图和基表合并后的子集上。
为什么要使用视图
因为视图是一个便利的方法,它只给用户对一张表的访问权限。
视图可以限制将返回的记录以及可用的字段。所有授权用户对这个视图的
访问权限而不是这张表的本身来限制他们的访问权限。视图还是一个用于
隐藏复杂语句和只显示给终端用户一个简单的一张表结果集的便利方法。
如何创建视图
创建视图的注意事项有:
1.在CREATE VIEW语句中,不能包括ORDER BY,COMPUTE或者COMPUTE BY 子句也不能出现INTO关键字
2.创建视图所参考基表的列数最多为1024列
3.创建视图不能参考临时表
4.尽量避免使用外连接创建视图
5.在一个批处理语句中,CREATE VIEW 语句不能和其他TRANSACT-SQL语句混合使用
使用T-SQL语句中的create view 创建视图。
create view view_name[(coiumn_list)] as select_statement(select 语句)
其中创建视图中的参数含义是:
- view_name: 为新创建的视图指定名称。
- coiumn_list: 当前表中列的名称如果这一选项,将自动使用当前基表中的列名称。
- select_statement: 定义一张或多张表中检索出行和列的select语句。
注意:在视图中的select语句不能包含order 不要 或者 into 子句,另外在查询中不能引用临时表
实例
在网吧计费系统中,我们队上机记录表创建视图
/*检查名为view_recordInfo 的视图是否存在,视图存储在系统表sysobjects中*/ if exists (select * from sysobjects where name='view_recordInfo') drop view view_recordInfo --删除该视图 create view view_recordInfo as select 记录编号=RecordId,会员卡号=CardNumber,电脑编号=p.PCId,上机时间=BeginTime,下机时间=EndTime,上机费用=Free from RecordInfo r join CardInfo c on r.CardId=c.CardId join PCInfo p on r.CardId=P.PCId go /*使用视图,视图是一张虚拟表,也可以像物理表一样使用*/ select * from view_recordInfo
使用视图的优点
- 视点集中:就是指使用户只关心他感兴趣的某些特定数据和他们所负责的特定任务。
- 简化操作:视图大大简化了用户对数据的操作。
- 定制数据:视图能够实现让不同的用户以不同的方式看到不同或相同的数据集。
- 安全性:视图可以作为一种安全机制,通过视图用户只能查看和修改他们所能看到的数据。其它数据库或表既不可见也不可访问。
索引的概念
在SQL Server中索引的类型
- 唯一索引:唯一索引不允许两行具有相同的索引值;
- 聚集索引(Clustered):表中各行的物理顺序与键值的逻辑(索引)顺序相同,每个表只能有一个;
- 非聚集索引(Non-clustered):非聚集索引指定表的逻辑顺序。数据存储在一个位置,索引存储在另一个位置,索引中包含指向数据存储位置的指针。可以有多个,小于249个。
如何创建索引
创建索引的语法
CREATE [UNIQUE] [CLUSTERED|NONCLUSTERED] INDEX index_name ON table_name (column_name…) [WITH FILLFACTOR=x]
实例
在网吧计费系统中,我们为用户查询余额创建索引。
create nonclustered index index_cardInfo_CardBalance on cardInfo(CardBalance) with fillfactor =40 go /*使用索引,指定按索引index_cardInfo_CardBalance*/ select * from cardInfo with(index=index_cardInfo_CardBalance) /*查询在50至100元间的余额*/ where CardBalance between 50 and 100
索引的优点和缺点
“水可载舟,亦可覆舟”,索引也是如此。索引有助于提高检索性能,但过多或不当的索引也会导致系统低效。
因为用户在表中没新建一个索引,数据库就要更多的工作。过多的索引甚至会导致索引碎片。
索引的优点
- 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
- 可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
- 可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
- 在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
- 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
索引的缺点
- 创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
- 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
- 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。