第6章-索引和视图PPT课件
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一个表只能包含一个聚集索引,但一个索引可以包含多个列。 在定义基本表时,可以通过定义主码约束自动创建一个唯一性
(UNIQUE)的聚集索引。(实际上在物理结构上,与主码约束 相对应是唯一性的聚集索引。) 也可以使用CREATE INDEX语句创建聚集索引。 聚集索引不适用于频繁更改的列和字节长的列。
视图的内容是由SELECT语句的结果集构成。
和真实的表一样,视图也包括几个被定义的数据列和多 个数据行,但从本质上讲,这些数据列和数据行来源于 其所引用的表。
数据库中只存放视图的定义,视图所对应的数据并不实 际地以视图结构存储在数据库中,而是存储在视图所引 用的表中。
当视图引用的基本表中的数据发生变化时,从视图中查 询出的数据也随之改变。
SELECT Student.Sno, Sname, Sdept ,Grade FROM Student , SC WHERE Student.Sno = SC.Sno AND o = 'c05'
-
22
查询视图V_IS_S1
-
23
3.在已有视图上定义新视图
在视图上再建立视图,这时作为数据源的视图必须是已 经建立好的。
列中的数据是唯一的,就可以在同一个表上创 建一个唯一的聚集索引和多个唯一的非聚集索 引。
-
11
示例
例1.为Student表的Sno列创建唯一聚集索引。 CREATE UNIQUE CLUSTERED INDEX Sno_ind ON Student (Sno)
例2.为SC表创建Cno列(升序)Grade(降序) Sno (升序)的非聚集复合索引。 CREATE INDEX CGS_ind ON SC ( Cno, Grade DESC, Sno )
-
25
4.定义带表达式的视图
由于视图中的数据并不实际存储,所以定义视图时可以根 据需要设置一些派生属性列,在这些派生属性列中保存经 过计算的值。这些派生属性由于在基本表中并不实际存在, 因此,也称它们为虚拟列。包含虚拟列的视图也称为带表 达式的视图。
[例4] 定义一个反映学生出生年份的视图。 CREATE VIEW BT_S(Sno, Sname, Sbirth) AS SELECT Sno, Sname, 2002-Sage FROM Student
[例3]建立数学系选修了‘c05’号课程学生的视图。 CREATE VIEW V_IS_S2 AS SELECT Sno, Sname, Grade FROM V_IS_S1 WHERE Sdept= '数学系'
这里的视图V_IS_S2就是建立在V_IS_S1视图之上的。
-
24
查询视图V_IS_S2
第6章 索引和视图
6.1 索引 6.1.1 索引的概念 6.1.2 索引的分类 6.1.3 创建和删除索引
6.2 视图 6.2.1 视图概念 6.2.2 定义视图 6.2.3 修改和删除视图 6.2.4 视图的作用
-
1
索引和视图是建立在基本表基础之上的两个数据库对象 索引作用是为了加快数据的查询效率
对于那些定义为text,image和bit数据类型的列不应 该增加索引。因为这些列的数据量要么相当大,要么取 值很少。
当修改频率远远大于检索频率时不应该创建索 引。因为 当增加索引时虽然提高了检索效率,但是会降低修改效 率。
-
8
6.1.2 索引的分类
聚集索引(聚簇索引 CLUSTERED)对数据按索引关键 字进行物理排序。
-
19
1. 定义单源表视图
视图的数据取自一Biblioteka 基本表的部分行、列,这样的视图行 列与基本表行列对应。
[例1]建立信息系学生的视图。 CREATE VIEW IS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept = ‘信息系’
说明:DBMS执行CREATE VIEW语句的结果只是保存视图 的定义,并不执行其中的SELECT语句。只有在对视图执 行查询时,才按视图的定义从相应基本表中查询数据。
-
33
6.2.5 视图的作用
简化数据查询语句 使用户能从多角度看待同一数据 提高了数据的安全性 提供了一定程度的逻辑独立性
-
34
-
20
查询视图IS_Student
-
21
2.定义多源表视图
多源表视图指的是定义视图的查询源表可以有多个。
[例2] 建立选修了‘c05’号课程的学生(Sno, Sname, Sdept, Grade)视图。 CREATE VIEW V_IS_S1(Sno, Sname, Sdept ,Grade) AS
-
12
删除索引 DROP INDEX 表名.索引名
例:删除索引CGS_ind DROP INDEX SC.CGS_ind
-
13
6.2 视图
6.2.1 视图概念 6.2.2 定义视图 6.2.3 修改和删除视图 6.2.4 视图的作用
-
14
6.2.1 基本概念
视图可以被看成是虚拟表,是从一个或几个基本表(或 视图)导出的表。
FROM SC
GROUP BY Sno
注意:如果子查询的选择列表包含表达式或统计函数,而且 在子查询中也没有为这样的列指定列标题,则在定义视 图的语句中必须要指定视图属性列的名字。
-
28
查询视图S_G
-
29
6.2.5 修改和删除视图
1.修改视图
ALTER VIEW 视图名[( 列名[ ,...n ])] AS 查询语句
61索引611索引的概念612索引的分类613创建和删除索引62视图621视图概念622定义视图623修改和删除视图624视图的作用索引通过对数据建立方便查询的搜索数据结构来达到加快数据查询效率的目索引定义属于数据库的内模式定义用createindex语句实现视图定义属于数据库的外模式定义用createview语句实现61索引611索引的概念612索引的分类613创建和删除索引611索引的概念dbms一般会自动建立以下属性列上的索引primarykeyunique索引为性能所带来的好处是有代价的因为索引在数据库中会占用一定的存储空间
索引通过对数据建立方便查询的搜索数据结构来达到 加快数据查询效率的目
索引定义属于数据库的内模式定义,用CREATE INDEX语句实现
视图作用是为了满足不同用户对数据的需求 视图是从一张或多张基本表(或视图)中抽取的数据 视图定义属于数据库的外模式定义,用CREATE VIEW语句实现
-
2
-
26
查询视图BT_S
-
27
5.含分组统计信息的视图
指视图的子查询中含有GROUP BY子句,这样的视图只能 用于查询,不能用于修改数据。
[例5] 定义一个存放每个学生的学号及平均成绩的视图。
CREATE VIEW S_G(Sno, AverageGrade)
AS
SELECT Sno, AVG(Grade)
-
32
2.删除视图
删除视图的SQL语句的格式为: DROP VIEW <视图名>
例.删除前边定义的IS_Student视图。
DROP VIEW S_G
注意:
如果删除了作为数据源的视图(比如删除了 V_IS_S1),则导出视图(如V_IS_S2)将无法 再使用了。
如果作为视图的基本表被删除了,则视图也将无 法使用。
典,并不执行其中的SELECT语句。 在对视图查询时,按视图的定义从基本表中将数据查出。 视图可以建立在基本表上,也可以建立在其他的视图上。
-
18
关于视图列名
组成视图的属性列名:全部省略或全部指定。如果省略 视图列名部分,则视图列同查询语句列。
以下三种情况下必须明确指定组成视图的所有列名: 某个目标列不是单纯的属性名,而是计算函数或列 表达式; 多表连接时选出了几个同名列作为视图的字段; 需要在视图中为某个列选用新的更合适的列名。
加快条件的判断速度。
-
7
不应该创建索引的列
在查询中很少使用或者参考的列不应该创建索引。因为 索引反而降低了系统的维护速度和增大了空间需求。
只有很少数据值的列不应该增加索引。例如性别列,在 查询的结果中,结果集的数据行占了表中数据行的很大 比例,即需要在表中搜索的数据行的比例很大。增加索 引,并不能明显加快检索速度。
-
30
示例
例:修改S_G视图,使其统计每个学生的考试 平均成绩和修课总门数。
ALTER VIEW S_G(Sno, AvgGrade,Count_Cno) AS SELECT Sno, AVG(Grade), Count(*) FROM SC GROUP BY Sno
-
31
查询修改后的S_G视图
-
6
应该创建索引的列
在主码(主键)列上DBMS强制建立索引。 在经常连接的列上建立索引,这些列主要是一些
外键,可以加快连接的速度。 在经常需要根据范围进行搜索的列上创建索引,,
其指定的范围是连续的。 在经常需要排序的列上创建索引,加快排序查询
时间。 在经常使用WHERE子句中的列上创建索引,
-
15
视图 基本表1
基本表2
-
16
视图与基本表关系
-
17
6.2.2 定义视图
定义视图语句格式 CREATE VIEW <视图名> [(<列名> [,<列名>]…)] AS <查询语句>
查询语句不允许含有ORDER BY子句和DISTINCT短语 RDBMS执行CREATE VIEW语句时只是把视图定义存入数据字
-
4
索引与书籍中的索引或目录类似 一个索引中包含指定列的所有列值及其相应的存储位置
-
5
建立索引的考虑
索引为性能所带来的好处是有代价的,因 为索引在数据库中会占用一定的存储空间。
在对数据进行插入、更改和删除操作时, 需要对索引进行维护,这需要花费额外的 时间。
在设计和创建索引时,应确保对性能的提 高程度大于在存储空间和处理资源方面的 代价。
非聚集索引(非聚簇索引NONCLUSTERED)不对数据 进行物理排序,而是进行逻辑排序。
一个表可以包含多个非聚集索引,一个索引也可以包含多个列。 可以通过CREATE INDEX语句创建非聚集索引。
-
9
6.1.3 创建和删除索引
创建索引
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX 索引名 ON { 表名 | 视图名 } ( 列名 [ ASC | DESC ] [ ,...n ] )
6.1 索引
6.1.1 索引的概念 6.1.2 索引的分类 6.1.3 创建和删除索引
-
3
6.1.1 索引的概念
建立索引的目的:加快查询速度 可以针对表中的任何列建立索引 谁可以建立索引?
DBA 或 表的属主(即建立表的人) DBMS一般会自动建立以下属性列上的索引
PRIMARY KEY UNIQUE 谁维护索引? DBMS自动完成 如何使用索引? DBMS自动选择是否使用索引以及使用哪些索引
UNIQUE:创建唯一索引。 CLUSTERED:创建聚集索引。 NONCLUSTERED:创建非聚集索引。 如果没有指定索引类型,则默认是创建非聚集索引。
-
10
关于唯一索引
可以确保索引列不包含重复的值。 在多列唯一索引的情况下,该索引可以确保索
引列中每个值的组合都是唯一的。 聚集索引和非聚集索引都可以是唯一的。只要
(UNIQUE)的聚集索引。(实际上在物理结构上,与主码约束 相对应是唯一性的聚集索引。) 也可以使用CREATE INDEX语句创建聚集索引。 聚集索引不适用于频繁更改的列和字节长的列。
视图的内容是由SELECT语句的结果集构成。
和真实的表一样,视图也包括几个被定义的数据列和多 个数据行,但从本质上讲,这些数据列和数据行来源于 其所引用的表。
数据库中只存放视图的定义,视图所对应的数据并不实 际地以视图结构存储在数据库中,而是存储在视图所引 用的表中。
当视图引用的基本表中的数据发生变化时,从视图中查 询出的数据也随之改变。
SELECT Student.Sno, Sname, Sdept ,Grade FROM Student , SC WHERE Student.Sno = SC.Sno AND o = 'c05'
-
22
查询视图V_IS_S1
-
23
3.在已有视图上定义新视图
在视图上再建立视图,这时作为数据源的视图必须是已 经建立好的。
列中的数据是唯一的,就可以在同一个表上创 建一个唯一的聚集索引和多个唯一的非聚集索 引。
-
11
示例
例1.为Student表的Sno列创建唯一聚集索引。 CREATE UNIQUE CLUSTERED INDEX Sno_ind ON Student (Sno)
例2.为SC表创建Cno列(升序)Grade(降序) Sno (升序)的非聚集复合索引。 CREATE INDEX CGS_ind ON SC ( Cno, Grade DESC, Sno )
-
25
4.定义带表达式的视图
由于视图中的数据并不实际存储,所以定义视图时可以根 据需要设置一些派生属性列,在这些派生属性列中保存经 过计算的值。这些派生属性由于在基本表中并不实际存在, 因此,也称它们为虚拟列。包含虚拟列的视图也称为带表 达式的视图。
[例4] 定义一个反映学生出生年份的视图。 CREATE VIEW BT_S(Sno, Sname, Sbirth) AS SELECT Sno, Sname, 2002-Sage FROM Student
[例3]建立数学系选修了‘c05’号课程学生的视图。 CREATE VIEW V_IS_S2 AS SELECT Sno, Sname, Grade FROM V_IS_S1 WHERE Sdept= '数学系'
这里的视图V_IS_S2就是建立在V_IS_S1视图之上的。
-
24
查询视图V_IS_S2
第6章 索引和视图
6.1 索引 6.1.1 索引的概念 6.1.2 索引的分类 6.1.3 创建和删除索引
6.2 视图 6.2.1 视图概念 6.2.2 定义视图 6.2.3 修改和删除视图 6.2.4 视图的作用
-
1
索引和视图是建立在基本表基础之上的两个数据库对象 索引作用是为了加快数据的查询效率
对于那些定义为text,image和bit数据类型的列不应 该增加索引。因为这些列的数据量要么相当大,要么取 值很少。
当修改频率远远大于检索频率时不应该创建索 引。因为 当增加索引时虽然提高了检索效率,但是会降低修改效 率。
-
8
6.1.2 索引的分类
聚集索引(聚簇索引 CLUSTERED)对数据按索引关键 字进行物理排序。
-
19
1. 定义单源表视图
视图的数据取自一Biblioteka 基本表的部分行、列,这样的视图行 列与基本表行列对应。
[例1]建立信息系学生的视图。 CREATE VIEW IS_Student AS SELECT Sno, Sname, Sage FROM Student WHERE Sdept = ‘信息系’
说明:DBMS执行CREATE VIEW语句的结果只是保存视图 的定义,并不执行其中的SELECT语句。只有在对视图执 行查询时,才按视图的定义从相应基本表中查询数据。
-
33
6.2.5 视图的作用
简化数据查询语句 使用户能从多角度看待同一数据 提高了数据的安全性 提供了一定程度的逻辑独立性
-
34
-
20
查询视图IS_Student
-
21
2.定义多源表视图
多源表视图指的是定义视图的查询源表可以有多个。
[例2] 建立选修了‘c05’号课程的学生(Sno, Sname, Sdept, Grade)视图。 CREATE VIEW V_IS_S1(Sno, Sname, Sdept ,Grade) AS
-
12
删除索引 DROP INDEX 表名.索引名
例:删除索引CGS_ind DROP INDEX SC.CGS_ind
-
13
6.2 视图
6.2.1 视图概念 6.2.2 定义视图 6.2.3 修改和删除视图 6.2.4 视图的作用
-
14
6.2.1 基本概念
视图可以被看成是虚拟表,是从一个或几个基本表(或 视图)导出的表。
FROM SC
GROUP BY Sno
注意:如果子查询的选择列表包含表达式或统计函数,而且 在子查询中也没有为这样的列指定列标题,则在定义视 图的语句中必须要指定视图属性列的名字。
-
28
查询视图S_G
-
29
6.2.5 修改和删除视图
1.修改视图
ALTER VIEW 视图名[( 列名[ ,...n ])] AS 查询语句
61索引611索引的概念612索引的分类613创建和删除索引62视图621视图概念622定义视图623修改和删除视图624视图的作用索引通过对数据建立方便查询的搜索数据结构来达到加快数据查询效率的目索引定义属于数据库的内模式定义用createindex语句实现视图定义属于数据库的外模式定义用createview语句实现61索引611索引的概念612索引的分类613创建和删除索引611索引的概念dbms一般会自动建立以下属性列上的索引primarykeyunique索引为性能所带来的好处是有代价的因为索引在数据库中会占用一定的存储空间
索引通过对数据建立方便查询的搜索数据结构来达到 加快数据查询效率的目
索引定义属于数据库的内模式定义,用CREATE INDEX语句实现
视图作用是为了满足不同用户对数据的需求 视图是从一张或多张基本表(或视图)中抽取的数据 视图定义属于数据库的外模式定义,用CREATE VIEW语句实现
-
2
-
26
查询视图BT_S
-
27
5.含分组统计信息的视图
指视图的子查询中含有GROUP BY子句,这样的视图只能 用于查询,不能用于修改数据。
[例5] 定义一个存放每个学生的学号及平均成绩的视图。
CREATE VIEW S_G(Sno, AverageGrade)
AS
SELECT Sno, AVG(Grade)
-
32
2.删除视图
删除视图的SQL语句的格式为: DROP VIEW <视图名>
例.删除前边定义的IS_Student视图。
DROP VIEW S_G
注意:
如果删除了作为数据源的视图(比如删除了 V_IS_S1),则导出视图(如V_IS_S2)将无法 再使用了。
如果作为视图的基本表被删除了,则视图也将无 法使用。
典,并不执行其中的SELECT语句。 在对视图查询时,按视图的定义从基本表中将数据查出。 视图可以建立在基本表上,也可以建立在其他的视图上。
-
18
关于视图列名
组成视图的属性列名:全部省略或全部指定。如果省略 视图列名部分,则视图列同查询语句列。
以下三种情况下必须明确指定组成视图的所有列名: 某个目标列不是单纯的属性名,而是计算函数或列 表达式; 多表连接时选出了几个同名列作为视图的字段; 需要在视图中为某个列选用新的更合适的列名。
加快条件的判断速度。
-
7
不应该创建索引的列
在查询中很少使用或者参考的列不应该创建索引。因为 索引反而降低了系统的维护速度和增大了空间需求。
只有很少数据值的列不应该增加索引。例如性别列,在 查询的结果中,结果集的数据行占了表中数据行的很大 比例,即需要在表中搜索的数据行的比例很大。增加索 引,并不能明显加快检索速度。
-
30
示例
例:修改S_G视图,使其统计每个学生的考试 平均成绩和修课总门数。
ALTER VIEW S_G(Sno, AvgGrade,Count_Cno) AS SELECT Sno, AVG(Grade), Count(*) FROM SC GROUP BY Sno
-
31
查询修改后的S_G视图
-
6
应该创建索引的列
在主码(主键)列上DBMS强制建立索引。 在经常连接的列上建立索引,这些列主要是一些
外键,可以加快连接的速度。 在经常需要根据范围进行搜索的列上创建索引,,
其指定的范围是连续的。 在经常需要排序的列上创建索引,加快排序查询
时间。 在经常使用WHERE子句中的列上创建索引,
-
15
视图 基本表1
基本表2
-
16
视图与基本表关系
-
17
6.2.2 定义视图
定义视图语句格式 CREATE VIEW <视图名> [(<列名> [,<列名>]…)] AS <查询语句>
查询语句不允许含有ORDER BY子句和DISTINCT短语 RDBMS执行CREATE VIEW语句时只是把视图定义存入数据字
-
4
索引与书籍中的索引或目录类似 一个索引中包含指定列的所有列值及其相应的存储位置
-
5
建立索引的考虑
索引为性能所带来的好处是有代价的,因 为索引在数据库中会占用一定的存储空间。
在对数据进行插入、更改和删除操作时, 需要对索引进行维护,这需要花费额外的 时间。
在设计和创建索引时,应确保对性能的提 高程度大于在存储空间和处理资源方面的 代价。
非聚集索引(非聚簇索引NONCLUSTERED)不对数据 进行物理排序,而是进行逻辑排序。
一个表可以包含多个非聚集索引,一个索引也可以包含多个列。 可以通过CREATE INDEX语句创建非聚集索引。
-
9
6.1.3 创建和删除索引
创建索引
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX 索引名 ON { 表名 | 视图名 } ( 列名 [ ASC | DESC ] [ ,...n ] )
6.1 索引
6.1.1 索引的概念 6.1.2 索引的分类 6.1.3 创建和删除索引
-
3
6.1.1 索引的概念
建立索引的目的:加快查询速度 可以针对表中的任何列建立索引 谁可以建立索引?
DBA 或 表的属主(即建立表的人) DBMS一般会自动建立以下属性列上的索引
PRIMARY KEY UNIQUE 谁维护索引? DBMS自动完成 如何使用索引? DBMS自动选择是否使用索引以及使用哪些索引
UNIQUE:创建唯一索引。 CLUSTERED:创建聚集索引。 NONCLUSTERED:创建非聚集索引。 如果没有指定索引类型,则默认是创建非聚集索引。
-
10
关于唯一索引
可以确保索引列不包含重复的值。 在多列唯一索引的情况下,该索引可以确保索
引列中每个值的组合都是唯一的。 聚集索引和非聚集索引都可以是唯一的。只要