第7章视图和索引优化查询
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
7.2.1 视图及其分类(1)
视图是由一个或多个数据表(基本表)或视图导出 的虚拟表或查询表,是关系数据库系统提供给用户 以多种角度观察数据库中数据的重要机制。 视图和表的不同之处在于,视图是一个虚拟表,视 图在数据库中仅保存其定义(select语句),其中的记 录在使用视图时动态生成。 视图中的记录可以来自当前数据库的一个或多个表 或视图,也可以来自远程数据库的一个或多个表或 视图。 视图中的记录不但可以查询,而且可以进行更新。
索引也有 缺点:
1、 占用储存空间,相对于数据部分来说是相当小的, 但不等于它不占用空间,那如果你要是不建立索引,这 部分空间是可以省下来的。但到底是要空间还是要性能 你看着办。当你的表比较大的时候,字段比较多的时候, 那么你的WHERE子句所包含的条件也就越多,那么你 就可能建立不止一个索引。那么这样的话,你建的索引 越多,空间占用就越大。 2、 在表中插入或更新表中数据时,将有额外的操作来 维护索引,那如果没有在表中建立索引的时候,如果向 表中插入数据时,只需向数据表插入即可,即维护一张 表就OK了,那现在建立了索引,当你在向表中插入记 录里,系统还向更改索引表的内容,即多维护一张表。
7.1.2 视图的优点及注意事项
(1)安全性 视图只抽取用户需要使用的数据,而不让 用户知道整个数据库的表结构。数据库中 其他数据则既看不见也取不到。 (2)简化数据库用户管理 不同用户可以专注于自身特定的数据和业 务,而不需要搞清整个数据库的结构才能 操作数据。
7.2.1 视图及其分类(2)
视图分为3种,即标准视图、索引视图和分区视图。 标准视图选取了来自一个或多个数据库中一个或多 个表及视图中的数据,在数据库中仅保存其定义, 在使用视图时系统才会根据视图的定义生成记录。 索引视图在数据库中不仅保存其定义,生成的记录 也被保存,还可以创建唯一的聚集索引。使用索引 视图可以加快查询速度,从而提高查询性能。 分区视图将一个或多个数据库中的一组表中的记录 抽取且合并。分区视图的作用是将大量的记录按地 域分开存储,使得数据安全和处理性能得到提高。
视图创建后,可以如同使用表一样使用视图。在 SELECT、INSERT、UPDATE、DELETE语句中,只要是 表的位置,都可以用视图来代替。
7.2.3 使用视图(2)
【实例7.4】下列两个T-SQL语句运行结果一样吗? SELECT Class Classid, Classname, Departid FROM
SELECT Classid, Viewclass 结果是一样的。
Classname,
Departid
FROM
7.2.4 修改视图(1)
可以使用ALTER VIEW语句修改视图。在查询编辑器 中输入修改视图的语句并运行,完成修改视图操作。
7.2.4 修改视图(2)
【实例7.9】修改视图Viewclassdept,只显示班级表 中的系别编号为2的班级编号、班级名称,而且保 证对视图中的修改必须满足系别编号为2的条件。 ALTER VIEW Viewclassdept AS SELECT Classid, Departid=2 Classname FROM Class WHERE Departid=2 WITH CHECK OPTION
第7章 使用视图和索引 章 优化查询
次课, 学时 学时) (时间:1次课,2学时) 时间: 次课
第7章
使用视图和索引优化查询
7.1 7.2 7.3 7.4 7.5 工作场景导入 视图 索引 回到工作场景 工作实训营
7.1 工作场景导入(1)
现在,在工作中需要使用SQL Server完成更多的操 作。具体的操作需求如下。 信息管理员小孙需要创建视图Viewstudentscore,包 括学生的学生编号、学生姓名、课程名称和成绩, 工作人员小周使用该视图查询所有学生的姓名、课 程名称和成绩。 信息管理员小孙需要在学生表的学生编号字段上创 建聚集索引PK_Student,在学生表的班级编号和姓 名字段上创建非聚集索引IX_Student。
7.3.3 修改索引(2)
【实例7.12】在Department表中禁用索引 IX_Department。 ALTER INDEX IX_Department ON Department DISABLE
7.3.4 删除索引(1)
删除索引之前,必须先删除与索引有关的PRIMARY KEY约束。 删除索引有两种途径:一种是在对象资源管理器中 通过菜单删除索引;另一种是在查询编辑器中输入 删除索引的T-SQL语句并运行,完成删除索引操作。 可以使用DROP INDEX语句删除索引。
7.3.2 创建索引(2)
【实例7.11】在Department表的Departid字段上创建 升序的聚集索引PK_Department,在Department表 的Departname字段上创建降序的唯一非聚集索引 IX_Department。 删除索引之前,必须先删除与索引有关的PRIMARY KEY约束。
7.1 视图的基本概念
7.1.1 视图的基本概念
视图是由一个或多个数据表(基本表)或视图导出的虚 拟表或查询表,是关系数据库系统提供给用户以多种角 度观察数据库中数据的重要机制。 视图是虚表。所谓虚表,就是说视图不是表。因为视图 只储存了它的定义(select语句),而没有储存视图对 应的数据,这些数据仍存放在原来的数据表(基表)中, 数据与基表中数据同步,即对视图的数据进行操作时, 系统根据视图的定义去操作与视图相关联的基本表。所 谓虚表,就是说视图在操作上又是表。因为视图一旦定 义好,就可以像基本表一样进行数据操作,包括查询、 修改、删除和更新数据。
【实例7.10】从当前数据库中删除视图Viewclassdept。 DROP VIEW viewclassdept
使用视图时,要注意以下事项: (1)只有在当前数据库中才能创建视图。 (2)视图的命名必须遵循标识符命名规则,不能与表 同名,且对每个用户视图名必须是唯一的,即对不同用 户,即使是定义相同的视图,也必须使用不同的名字。 (3)不能把规则、默认值或触发器与视图相关联。 (4)使用视图查询时,若其关联的基本表中添加了新 字段,则必须重新创建视图才能查询到新字段。 (5)如果与视图相关联的表或视图被删除,则该视图 将不能再使用。
索引的概念
索引是信赖于表建立的,也就是说没有单独的索引,只 有建立在表上的索引。 索引是一个列表,这个列表中包含了某个表中一列或者 若干列的集合,以及这些值的记录在数据表中存储位置 的物理地址。 一个表的存储由两部分组成的: 一部分用来存放表的数据页面 另一部分存放索引页面。
索引就存放在索引页面上,当我们进行数据查询 时,系统先搜索索引页面,从中找到所需数据 的物理地址,再直接通过物理地址从数据页面 中取数据。 索引页面相对于数据页面来说小得 多。 索引使数据库程序无须对整个表进行扫描,就可 以在其中找到所需数据。利用索引可以大大提 高系统的性能。
7.3 索引
7.3.1 7.3.2 7.3.3 7.3.4 7.3.5 索引及其分类 创建索引 修改索引 删除索引 设计和优化索引
索引的概念
实际业务中,数据库的表中记录往往数量很多, 怎样才能提高查询速度、优化查询性能呢? 索引就是加快检索表中数据的方法。数据库中 的索引和书的目录很相似。在一本书中,利用 目录可以快速查找所需信息,无需阅读整本书; 在数据库中,索引使数据库程序无需对整个表 进行扫描,就可以找到所需数据。 利用索引可以为频繁访问表中的信息建立一个 高速通道,从而改进系统的查询性能。
7.3.1 索引及其分类
当建立主键约束时,如果表中没有聚集索引,SQL会 用主键作为聚集索引。 非聚集索引的键值顺序和表中记录在物理介质上的存 储位置顺序是不一致的。一个表可以有多个非聚集索 引。 SQL Server还有一种索引,是唯一索引。
7.3.2 创建索引(1)
创建索引有两种途径:一种是在对象资源管理器中 通过菜单创建索引;另一种是在查询编辑器中输入 创建索引的T-SQL语句并运行,完成创建索引操作。 可以使用CREATE INDEX语句创建索引。
7.2.2 创建视图(1)
创建视图有两种途径:一种是在对象资源管理器中 通过菜单创建视图;另一种是在查询编辑器中输入 创建视图的T-SQL语句并运行,完成创建视图的操作。 可以使用CREATE VIEW语句创建视图。
使用CREATE VIEW命令创建视图
CREATE VIEW 视图名[(视图列名1,视图列名2,...,视 图列名n)] [WITH ENCRYPTION] AS SELECT语句 [WITH CHECK OPTION] 创建视图的基本语法格式如下: 其中WITH ENCRYPTION子句对视图进行加密,WITH CHECK OPTION表示对视图进行UPDATE、INSERT 和DELETE操作时,要保证所操作的行满足视图定义中 的条件,即只有满足视图定义条件的操作才能执行。
修改索引有两种途径:一种是在对象资源管理器中 通过菜单修改索引;另一种是在查询编辑器中输入 修改索引的T-SQL语句并运行,完成修改索引操作。 如果修改索引所包含的字段,可以直接使用CREATE INDEX语句完成。如果需要启用或禁用索引,重新生 成或重新组织索引,或者设置索引选项,可以使用 ALTER INDEX语句。
7.2.2 创建视图(2)
【实例7.1】创建视图Viewclass,只显示班级表中的 班级编号、班级名称和系编号。 CREATE VIEW Viewclass AS SELECT Classid, Classname,Departid FROM Class 【实例7.2】 【实例7.3】
7.2.3 使用视图(1)
7.1 工作场景导入(2)
(1) 什么是视图?视图有什么特点? (2) 如何创建、使用、修改视图? (3) 如何提高查询速度和优化数据库性能? (4) 什么是索引?索引有哪些分类? (5) 如何创建、修改、删除索引? (6) 如何设计和优化索引?
7.2 视图
7.2.1 7.2.2 7.2.3 7.2.4 7.2.5 视图及其分类 创建视图 使用视图 修改视图 删除视图
建立索引的一般原则是: (1)对经常用来查询数据记录的字段建立索引。 (2)对表中的主键字段建立索引。 (3)对表中的外键字段建立索引。 (4)对在查询中用来连接表的字段建立索引。
索引的分类
从不同的角度,对索引的类型有不同的划分方法。按存 储结构区分,有聚集索引和非聚集索引。 聚集索引(Clustered Index)对表在物理数据页中的 数据按列进行排序,然后再重新存储到磁盘上。换句话 说,索引的顺序决定了表中行的存储顺序。 由于表中的数据行只能以一种排序方式存储在磁盘上, 所以一个表只能有一个聚集索引。如一个表有姓名,性 别,身份证号,如我在身份证号上做了一个聚集索引, 就会按顺序,那如果是姓名呢?同理。。。顺序就变了, 也就是说索引变了,存储顺序就变了,只能有一个,也 可以不建。
CREATE CLUSTERED INDEX PK_Department ON Department(Departid ASC) CREATE UNIQUE NONCLUSTERED INDEX IX_Department ON Department(Departname DESC)
7.3.3 修改索引(1)
7.2.5 删除视图(1)
视图是基于表或其他视图的,因此建议在删除视图 前先查看其依赖关系。 删除视图有两种途径:一种是在对象资源管理器中 通过菜单删除视图;另一种是在查询编辑器中输入 删除视图的T-SQL语句并运行,完成删除视图操作。 可以使用DROP VIEW语句删除视图。
7.2.5 删除视图(2)
7.3.4 删除索引(2)
百度文库
【实例7.16】从Department表上删除索引 IX_Department。 DROP INDEX IX_Department ON Department