数据库原理及应用(SQL Server 2008)第7章 索引与视图-ANSWER

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

7.6.1 选择题

7.6.2 填空题

1. 聚集索引非聚集索引唯一性索引索引视图

2. 修改数据

3. 创建表

4. 删除

5. 表扫描使用索引查找

7.6.3 简答题

1. 分析索引的优点和缺点。

答:这是因为创建索引可以大大提高系统的性能:

(1)通过创建唯一性索引,可以保证每一行数据的唯一性。

(2)可以大大加快数据的检索速度,这也是索引的最主要的原因。

(3)可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。

(4)在使用ORDER BY和GROUP BY子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。

(5)通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。

既然增加索引有如此多的优点,为什么不对表中的每一个列创建一个索引呢?虽然索引有许多优点,但是为表中的每一个列都增加索引是非常不明智的做法。这是因为增加索引也有缺点:

(1)创建索引和维护索引要耗费时间。

(2)索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间。如果要建立聚集索引,那么需要的空间就会更大。

(3)当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。

2. 堆结构的特点是什么?

答:堆是不含聚集索引的表,表中的数据没有任何的顺序。堆结构中数据按照插入的先后次序存放,堆文件的数据页面不一定在物理上相邻。堆文件执行插入操作很容易,但是效率不高。因为堆文件只能执行顺序扫描,这对范围查询很有效,但对于随机查询(单个记录)的效率很低。查询最少的次数为1,最多的次数为N(N为记录数),平均次数为(N+1)/2。如果N比较大,耗费的CPU和I/O资源都会很大。

3. 什么是聚集索引和非聚集索引?比较这两种索引结构的特点。

答:聚集索引是一种数据表的物理顺序与索引顺序相同的索引。建立索引时,系统将对表的物理数据页中的数据按列进行排列,然后再重新存储到磁盘上,即聚集索引与数据是混为一体的。

非聚集索引是一种数据表的物理顺序与索引顺序不相同的索引。非聚集索引与聚集索引

具有相同的B树结构,但是在非聚集索引中,基础表的数据行不是按照非聚集键的顺序排序和存储,且非聚集索引的叶级是由索引页而不是由数据页组成。

非聚集索引既可以定义在表或视图的聚集索引上,也可以定义在表或视图的堆上。非聚集索引中的每一个索引行都是由非聚集键值和行定位符组成,该行定位符指向聚集索引或堆中包含该键值的数据行。当在一个聚集索引上构建非聚集索引时,索引中的指针值就是数据行的聚集索引键值。

4. 为什么要使用视图?

答:视图是查看数据库表中数据的一种方式。视图提供了存储预定义的查询语句作为数据库中的对象以备以后使用的能力。视图是一种逻辑对象,是一种虚拟表。

视图结合了基本表和查询两者的特性:用户可以使用视图从一个或多个相关的基表中提取一个数据集(查询特性);用户能运用视图去更新视图中的信息,并且持久地存储到磁盘(表特性)。

5. 视图的数据来自何处?能否说视图不占据任何的物理空间,为什么?

答:视图是一种逻辑对象,是一种虚拟表。除非是索引视图,否则视图不占物理存储空间。在视图中被查询的表称为视图的基表。大多数的SELECT语句都可以用在视图的创建中。

不能说视图不占据任何的物理空间。

因为,一般情况下的视图都是标准视图,它是一个虚拟表并不占物理存储空间。如果希望提高聚合多行数据的视图性能,那么可以创建索引视图。索引视图是被物理化的视图,它包含有经过计算的物理数据。

6. 如何使用CREATE VIEW语句创建视图?

答:使用Transact-SQL语句中的CREATE VIEW命令创建视图的语法形式如下:CREATE VIEW view_name [ ( column [ ,...n ] ) ] [ WITH < view_attribute > [ ,...n ] ]

AS

select_statement [ WITH CHECK OPTION ]

< view_attribute > ::=

{ ENCRYPTION | SCHEMABINDING | VIEW_METADATA }

7. 如何创建索引视图?

答:创建索引视图时,视图不能引用任何其他视图,只能引用基表。另外,必须使用SCHEMABINDING 子句将视图绑定到架构。

8. 如何查看视图的定义文本?

答:使用系统存储过程语句sp_helptext查看视图、触发器、存储过程在系统表中的定义文本,其语法形式如下:

sp_helptext [@objname = ] ‘name’

参数[@objname = ] ‘name’为对象的名称,对象必须在当前数据库中。

7.7上机实验

(1)建立索引

1)

USE stu

Go

CREATE INDEX index_Sno ON _Student(Sno)___

2)

USE stu

Go

CREATE _ NOCLUSTERED INDEX index_Cno ON Courses(Cno)

3)

USE stu

GO

CREATE INDEX index_Sname_Sno ON_Student(姓名,学号)__

4)

USE stu

GO

CREATE CLUSTERED INDEX index_SCno ON_Enrollment(学号,课程号)_

5)

USE stu

GO

CREATE UNIQUE CLUSTERED INDEX index_Cno_Cname _ON Courses(课程号,课程名) WITH PAD_INDEX,FILLFACTOR=80,IGNORE_DUP_KEY

(2)创建视图

CREATE VIEW view_name [ ( column [ ,...n ] ) ] [ WITH < view_attribute > [ ,...n ] ]

AS

select_statement [ WITH CHECK OPTION ]

< view_attribute > ::=

{ ENCRYPTION | SCHEMABINDING | VIEW_METADATA }

1)

CREATE VIEW V_female AS SELECT * FROM Student WHERE Ssex=’F’

2)

CREATE VIEW V_age AS SELECT Sno,Sage FROM Student

3)

CREATE VIEW V_ average Sno, average AS SELECT Sno, A VG(Grade) FROM Student

(3)使用视图

SELECT Sno,name,___average__ FROM Student ,V_average WHERE_ Student .Sno= V_average .Sno

相关文档
最新文档