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

合集下载

SqlServer索引的原理与应用

SqlServer索引的原理与应用

SqlServer索引的原理与应⽤索引的概念索引的⽤途:我们对数据查询及处理速度已成为衡量应⽤系统成败的标准,⽽采⽤索引来加快数据处理速度通常是最普遍采⽤的优化⽅法。

索引是什么:数据库中的索引类似于⼀本书的⽬录,在⼀本书中使⽤⽬录可以快速找到你想要的信息,⽽不需要读完全书。

在数据库中,数据库程序使⽤索引可以重啊到表中的数据,⽽不必扫描整个表。

书中的⽬录是⼀个字词以及各字词所在的页码列表,数据库中的索引是表中的值以及各值存储位置的列表。

索引的利弊:查询执⾏的⼤部分开销是I/O,使⽤索引提⾼性能的⼀个主要⽬标是避免全表扫描,因为全表扫描需要从磁盘上读取表的每⼀个数据页,如果有索引指向数据值,则查询只需要读少数次的磁盘就⾏啦。

所以合理的使⽤索引能加速数据的查询。

但是索引并不总是提⾼系统的性能,带索引的表需要在数据库中占⽤更多的存储空间,同样⽤来增删数据的命令运⾏时间以及维护索引所需的处理时间会更长。

所以我们要合理使⽤索引,及时更新去除次优索引。

数据表的基本结构⼀个新表被创建之时,系统将在磁盘中分配⼀段以8K为单位的连续空间,当字段的值从内存写⼊磁盘时,就在这⼀既定空间随机保存,当⼀个 8K⽤完的时候,数据库指针会⾃动分配⼀个8K的空间。

这⾥,每个8K空间被称为⼀个数据页(Page),⼜名页⾯或数据页⾯,并分配从0-7的页号, 每个⽂件的第0页记录引导信息,叫⽂件头(File header);每8个数据页(64K)的组合形成扩展区(Extent),称为扩展。

全部数据页的组合形成堆(Heap)。

SQLS规定⾏不能跨越数据页,所以,每⾏记录的最⼤数据量只能为8K。

这就是char和varchar这两种字符串类型容量要限制在8K以内的原因,存储超过8K的数据应使⽤text类型,实际上,text类型的字段值不能直接录⼊和保存,它只是存储⼀个指针,指向由若⼲8K的⽂本数据页所组成的扩展区,真正的数据正是放在这些数据页中。

sqlserver2008大数据库应用与开发教程课后习题参考问题详解

sqlserver2008大数据库应用与开发教程课后习题参考问题详解

实用标准文档SQL Server 2008数据库应用与开发教程(第二版)第一章习题参考答案1.简述SQL Server 2008系统中主要数据库对象的特点。

答:主要的数据库对象包括数据库关系图、表、视图、同义词、存储过程、函数、触发器、程序集、类型、规则和默认值等。

“表”节点中包含了数据库最基本、最重要的对象——表。

表实际用来存储系统数据和用户数据,是最核心的数据库对象。

“视图”节点包含了数据库中的视图对象。

视图是一种虚拟表,用来查看数据库中的一个或多个表,视图是建立在表基础之上的数据库对象,它主要以SELECT语句形式存在。

在“同义词”节点中包含了数据库中的同义词对象。

这是Microsoft SQL Server 2008系统新增的一种对象。

“可编程性”对象是一个逻辑组合,它包括存储过程、函数、触发器、程序集、类型、规则和默认值等对象。

数据库中的函数对象包含在“函数”节点中。

函数是接受参数、执行复杂操作并将结果以值的形式返回的例程。

2.SQL Server 2008数据库管理系统产品分为哪几个版本,各有什么特点?答:SQL Server 2008数据库管理系统产品的服务器版本包括了企业版和标准版,专业版本主要包括以下版本:工作组版(Workgroup)、开发人员版(Developer)、免费精简版(Express)、Web版,以及免费的集成数据库SQL Server Compact 3.5。

3.SQL Server 2008包含哪些组件,其功能各是什么?答:SQL Server 2008的体系结构是对SQL Server的组成部分和这些组成部分之间的描述。

Microsoft SQL Server 2008系统由4个组件组成,这4个组件被称为4个服务,分别是数据库引擎、Analysis Services、Reporting Services和Integration Services。

数据库引擎是Microsoft SQL Server 2008系统的核心服务,负责完成数据的存储、处理、查询和安全管理等操作。

数据库技术与应用—SQL Server 2008(第2版)第7章 操纵数据表中的数据

数据库技术与应用—SQL Server 2008(第2版)第7章 操纵数据表中的数据


更新数据时,每个列既可以被直接赋值,也可以通过计算 得到新值。 【例7.6】将所有计算机系学生的选课成绩加5分。
UPDATE Grade SET grade =grade+5 WHERE studentID IN ( SELECT studentID FROM student WHERE speciality='计算机')

3
7.2 数据操作

7.2.1 用INSERT语句插入数据
7.2.2 用UPDATE语句更新数据
7.2.3 用DELETE语句删除数据
4
7.2.1 用INSERT语句插入数据

INSERT语句的基本格式:
INSERT [ INTO ] table_or_view_name [ ( column_list ) ] { { VALUES ( ( { DEFAULT | NULL | expression } [ ,...n ] ) [ ,...n ] ) | derived_table | DEFAULT VALUES } }
17
7.3 检索数据概述

检索数据是使用数据库的最基本的方式,也是最重要的方 式。 在SQL Server中,可以使用SELECT语句执行数据检索的操 作,查看表中的数据。 该语句具有非常灵活的使用方式和丰富的功能,它既可以 在单表上完成简单的数据查询,也可以在多表上完成复杂 的连接查询和嵌套查询。
11


那么标识列的数据是不是永远都没有办法手工更新呢?不 是的。如果想手工更新学号的值,可以通过以下方法实现。 首先,使用SET命令打开INSERT_IDENTIYT选项: SET IDENTITY_INSERT student ON 然后使用INSERT命令插入数据。此时一定要显式指出更 新哪些列数据,包括标识列,即列列表不能省略。命令 如下: INSERT INTO StuInfo (stuID, stuName,sex) VALUES (3,'汪华','男') 注意:INSERT_IDENTIYT选项为ON时,系统将不再自动为标 识列填入 值 。 如果 想恢复自 动输入 , 需要再次 执行 SET IDENTITY_INSERT student OFF,将IDENTITY_ INSERT选项 设置为OFF。

SQL Server 2008数据库程序设计第7章 索引

SQL Server 2008数据库程序设计第7章 索引
第7章 索引
7.1 索引概述 7.2 创建索引 7.3 管理索引
7.1 索引概述
7.1.1 索引分类
索引包含了从表或视图中一个或多个列生成的键,通 过键映射到指定数据的存储位置的指针 。
数据的访问方式和索引的存储结构 。 两种基本的索引类型:聚集索引和非聚集索引 。聚集
索引是一种数据表的物理顺序与索引顺序相同的索引, 每个表只能有一个聚集索引,非聚集索引则是一种数 据表的物理顺序与索引顺序不相同的索引。
在“新建索引”窗体中,在“常规”选项中,输入索 引的名称Index_Name_Birth,选择非聚集索引类型, 点击“添加”按钮,打开窗体。在该窗体中选择 Sname字段和Birthday字段作为索引列,单击“确定” 按钮,返回“新建索引”对话框。
7.2 创建索引
在“选项”页可设置索引的填充因子等选项,填充因 子指示索引页的填满程度。在“包含性列”中,设置 索引页还可包含的其他非键列。在“存储”页,可以 对指定的文件组或分区方案建立索引。在“空间”页 可以设置空间索引的空间属性。在“筛选器”页可以 定义筛选索引的筛选表达式。
使用存储过程sp_helpindex或sp_help查看索引信息 【例7-4】 查询tblstudents表的索引信息 USE CJMS; EXEC sp_helpindex tblstudents;
7.3 管理索引
7.3.2 修改索引
1.ALTER INDEX的语法格式为: ALTER INDEX { index_name | ALL } ON { table | view } { REBUILD [ WITH ( <rebuild_index_option> [ ,...n ] ) ] | DISABLE | REORGANIZE [ WITH ( LOB_COMPACTION = { ON |

sql server 2008案例教程及实训 第7章 视图

sql server 2008案例教程及实训 第7章 视图

update V_BookInfo2 set 价格=30
能运行么?
7.3.3 使用视图管理表中的数据
4.使用视图删除数据 【例7.15】使用T-SQL语句删除视图V_BookInfo2中图书编号 为“0341-3601”的图书记录。 代码如下:
delete from V_BookInfo2 where 图书编号='0341-3601'
7.3.1 创建视图
【例7.10】使用T-SQL语句,在“图书借阅信息管理系统” 数据库中,基于基表“BookInfo”创建一个名为 “V_BookInfo2”的视图,要求其中的内容是所有价格低 于30的低价图书,并加密视图的定义。
代码如下:
create view V_BookInfo2 with encryption as select * from BookInfo where 价格<30
查询定义信息:
Sp_helptext V_BookInfo2
7.3.1 创建视图
【例7.11】使用T-SQL语句,在“图书借阅信息管理系统”
数据库中,基于基表BookInfo、BorrowList和
ReaderCard三张表,创建一个名为“V_BBR”的视图,
要求其中内容包括借书证编号、读者姓名、图书名称。
7.3.3 使用视图管理表中的数据
1.使用视图查询数据 用户可以通过T-SQL语句对视图进行查询,其基
本语法是:
select * from view_name
7.3.3 使用视图管理表中的数据
2.使用视图插入数据 当向视图中进行插入或更新数据时,实际上就是对视
图所基于的表执行数据的插入和更新,但通过视图进行插入 和更新操作时有如下一些限制: (1)在一个语句中,一次不能修改一个以上的视图基表。 (2)对视图中所有列的修改必须遵守视图基表中所定义的各 种数据约束条件。 (3)不允许对视图中的计算列进行修改,也不允许对视图定 义中包含有聚合函数或GROUP BY子句的视图进行插入或修 改操作。

华科土木数据库第7章 索引与视图

华科土木数据库第7章  索引与视图

29
《数据库技术与应用-SQL Server》
(2)使用FREETEXT进行全文查询
使用FREETEXT进行全文查询时,全文查询
引擎将对指定的项目建立一个内部查询,可以从表
中搜索一组单词或短语甚至完整的句子。
语法格式: SELECT 字段列表 FROM 表名 WHERE FREETEXT(字段名|*,'自由文本')
• 用SQL命令创建索引
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name ON table_or_view_name ( column_name [ ASC | DESC ] [ ,…n ] )
[ ON { filegroup_name | “default” } ]
一性约束的字段创建。
4
《数据库技术与应用-SQL Server》
• 主键索引
系统会自动为主键建立索引,称为主键索引。
• 聚集索引
在聚集索引中,表中各记录的物理顺序与键值的逻辑(索 引)顺序相同。只有在表中建立了一个聚集索引后,数据才会 按照索引键值指定的顺序存储到表中。 由于一个表中的数据只能按照一种顺序来存储,所以在一 个表中只能建立一个聚集索引。
例:删除T表中名为TI的索引。 DROP INDEX T.TI DROP INDEX TI ON T
19
《数据库技术与应用-SQL Server》
例7-4 删除employee表内名为employee_index_2的 索引。 USE Sales IF EXISTS (SELECT name FROM sysindexes WHERE name = 'employee_index_2') DROP INDEX employee.employee_index_2 GO

第7章 索引与视图 数据库原理及应用SQL Server 2008数据库原理及应用课件

第7章 索引与视图 数据库原理及应用SQL Server 2008数据库原理及应用课件


创建一个非聚集索引时,应该注意下列事项:
(1)如果没有指定索引类型,那么默认的类型是非聚集索引。 (2)索引页的叶级只包含索引的关键字,不包含实际的数据 (3)每个表最多可以创建249个非聚集索引。 (4)聚集索引应在非聚集索引被创建之前创建。 (5)唯一性是由叶级维护的。 (6)以下情况发生时,SQL Server会自动重建现有的非聚集索 引: 删除现有的聚集索引时 创建聚集索引时 使用DROP_EXISTING选项来改变聚集索引列的定义时
7.1.1 索引的基本概念

数据库系统用下列两种方法之一来访问数据:
(1)表扫描,就是指系统将指针放在该表的表头数据所在的数 据页上,然后按照数据页的排列顺序,逐页地从前向后扫描 该表数据所占有的全部数据页,直至扫描完表中的全部记录。 在扫描时,如果找到符合查询条件的记录,那么就将这条记 录挑选出来。最后,将全部挑选出来符合查询语句条件的记 录显示出来。 (2)使用索引查找。索引是一种树状结构,其中存储了关键字 和指向包含关键字所在记录的数据页的指针。当使用索引查 找时系统将沿着索引的树状结构,根据索引中关键字和指针 找到符合查询条件的记录。最后将全部查找到的符合查询语 句条件的记录显示出来。
7.2 索引的操作
7.2.1 创建索引 创建索引的方式可以分为直接方法和间接方法。

直接创建索引的方法就是使用命令和工具直接创建索引。 间接创建索引就是通过创建其他对象而附加创建了索引。

主键约束或唯一性约束创建的索引的优先级高于使用 CREATE INDEX语句创建的索引。当在表上定义主键或 唯一性约束时,如果表中已经有了使用CREATE INDEX 语句创建的标准索引时,那么主键约束或唯一性约束 创建的索引覆盖以前创建的标准索引。

数据库原理及应用项目7事务、索引和视图的创建与应用

数据库原理及应用项目7事务、索引和视图的创建与应用

任务7.1 知识准备
7.1.3 视图的概念和作用
视图是由一个或多个基本表或其他视图导出的表。 使用视图有以下几个优点。 (1)简化查询语句 (2)增加可读性 (3)保证数据逻辑独立性 (4)增加数据的安全性和保密性 视图也有不少缺点,如操作视图会比直接操作基础表慢,所以 尽量要避免在大型表上创建视图,也尽量不要创建嵌套视图。
项目目标
知识目标
>了解事务的概念和特性。 >掌握事务创建。 >了解索引的类型和特点。 >掌握索引的创建。 >力目标
01 02
>能够熟练创建和提交事务的简单方法。 >能够完成索引的创建、管理、维护和删 除等操作。 >能够实现视图的创建、修改、使用和删 除等操作。
7.2.2 创建事务
用户自定义事务的定义方法主要有以下几个步骤。 3.撤销事务 若要撤销一个事务,可以使用ROLLBACK TRANSACTION语句,它使 得事务回滚到起点,撤销自最近一条BEGIN TRANSACTION语句以后对数 据库的所有更改,同时也标志了一个事务的结束。 语法格式:
另外,一条ROLLBACK WORK语句也能撤销一个事务, 语法格式:
用户自定义事务的定义方法主要有以下几个步骤。 2.结束事务 COMMIT TRANSCATION语句是提交语句,它将事务开始以来所执行 的所有数据都修改成为数据库的永久部分,也标志一个事务的结束。 语法格式:
标志一个事务的结束也可以使用COMMIT WORK语句。 语法格式:
任务7.2 “网络论坛”数据库数据 管理
索引和视图主要是起到辅助查询和组织数据的功能,通过使用它们 ,可以大大地提高查询数据的效率。但是,二者是有区别的:视图将查 询语句压缩,使大部分查询语句放在服务端,客户端只输入你要查询的 信息,而不用写出大量的查询代码这其中也是一个封装的过程。索引类 似目录,使得查询更快捷、更高效,适用于访问大型数据库。在本项目 中,将针对事务、索引和视图的内容进行详细的讲解。
  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。

相关文档
最新文档