第8章_索引与视图_第1页
第8章_索引与视图_第2页
第8章_索引与视图_第3页
第8章_索引与视图_第4页
第8章_索引与视图_第5页
已阅读5页,还剩59页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2021-7-111 第第8章章 索引与视图索引与视图 2021-7-122 本章内容本章内容 n 8.1 使用索引使用索引 n 8.2 使用视图使用视图 2021-7-133 8.1 使用索引使用索引 索引是与表或视图关联的磁盘上结构,索引中的键存储索引是与表或视图关联的磁盘上结构,索引中的键存储 在一个结构中,使在一个结构中,使SQL Server可以快速有效地查找与键值关可以快速有效地查找与键值关 联的行。联的行。 建立索引的优点:建立索引的优点: 索引可以减少为返回查询结果集而必须读取的数据量;索引可以减少为返回查询结果集而必须读取的数据量; 索引还可以强制表中的行具有唯一性,从而确保

2、表数据的数索引还可以强制表中的行具有唯一性,从而确保表数据的数 据完整性;使用索引可以快速找到表或索引视图中的特定信据完整性;使用索引可以快速找到表或索引视图中的特定信 息息 。 2021-7-144 8.1 使用索引使用索引 n 索引的分类索引的分类 表或视图的索引可以包括以下几类:表或视图的索引可以包括以下几类: (1) 惟一索引惟一索引 在表中建立惟一性索引时,组成该索引的字段或字段组在表中建立惟一性索引时,组成该索引的字段或字段组 合在表中具有惟一值,也就是说,对于表中的任何两行记录合在表中具有惟一值,也就是说,对于表中的任何两行记录 来说,索引键的值都是各不相同。来说,索引键的值都是

3、各不相同。 2021-7-155 8.1 使用索引使用索引 (2) 聚集索引聚集索引 聚集索引根据数据行的键值在表或视图中排序和存储这聚集索引根据数据行的键值在表或视图中排序和存储这 些数据行,即聚集索引决定了数据的物理顺序。只有在表中些数据行,即聚集索引决定了数据的物理顺序。只有在表中 建立了一个聚集索引后,数据才会按照索引键值指定的顺序建立了一个聚集索引后,数据才会按照索引键值指定的顺序 存储到表中。由于一个表中的数据只能按照一种顺序来存储,存储到表中。由于一个表中的数据只能按照一种顺序来存储, 所以在一个表中只能建立一个聚集索引。所以在一个表中只能建立一个聚集索引。 表具有聚集索引,则该

4、表称为聚集表。否则,其数据行表具有聚集索引,则该表称为聚集表。否则,其数据行 存储在一个称为堆的无序结构中存储在一个称为堆的无序结构中 。 2021-7-166 8.1 使用索引使用索引 (3) 非聚集索引非聚集索引 非聚集索引包含非聚集索引键值,并且每个键值项都有非聚集索引包含非聚集索引键值,并且每个键值项都有 指向包含该键值的数据行的指针。具有独立于数据行的结构指向包含该键值的数据行的指针。具有独立于数据行的结构 。 从非聚集索引中的索引行指向数据行的指针称为行定位从非聚集索引中的索引行指向数据行的指针称为行定位 器。行定位器的结构取决于数据页是存储在堆中还是聚集表器。行定位器的结构取决于

5、数据页是存储在堆中还是聚集表 中。对于堆,行定位器是指向行的指针。对于聚集表,行定中。对于堆,行定位器是指向行的指针。对于聚集表,行定 位器是聚集索引键。位器是聚集索引键。 注意:注意: 聚集索引和非聚集索引都可以是唯一的,即任何两行都聚集索引和非聚集索引都可以是唯一的,即任何两行都 不能有相同的索引键值不能有相同的索引键值 ;索引也可以不是唯一的,即多行可;索引也可以不是唯一的,即多行可 以共享同一键值以共享同一键值 ;每当修改了表数据后,都会自动维护表或;每当修改了表数据后,都会自动维护表或 视图的索引视图的索引 。 2021-7-177 8.1 使用索引使用索引 (4) 包含性列索引包含

6、性列索引 一种非聚集索引,它扩展后不仅包含键列,还包含非键一种非聚集索引,它扩展后不仅包含键列,还包含非键 列列 。 (5) 索引视图索引视图 视图的索引将具体化视图的索引将具体化(执行执行)视图,并将结果集永久存储在视图,并将结果集永久存储在 唯一的聚集索引中,而且其存储方法与带聚集索引的表的存唯一的聚集索引中,而且其存储方法与带聚集索引的表的存 储方法相同。创建聚集索引后,可以为视图添加非聚集索引。储方法相同。创建聚集索引后,可以为视图添加非聚集索引。 2021-7-188 8.1 使用索引使用索引 (6) 全文索引全文索引 一种特殊类型的基于标记的功能性索引,由一种特殊类型的基于标记的功

7、能性索引,由Microsoft SQL Server全文引擎全文引擎(MSFTESQL)服务创建和维护,用于帮服务创建和维护,用于帮 助在字符串数据中搜索复杂的词。助在字符串数据中搜索复杂的词。 (7) XML索引索引 xml数据类型列中数据类型列中XML二进制大型对象的已拆分持久表二进制大型对象的已拆分持久表 示形式示形式 。 注意:注意: 对表中的列定义了对表中的列定义了PRIMARY KEY约束和约束和UNIQUE约束约束 时,会自动创建索引。时,会自动创建索引。 2021-7-199 8.1 使用索引使用索引 n 索引设计准则索引设计准则 要设计出好的索引集,需要了解数据库、查询和数据

8、列要设计出好的索引集,需要了解数据库、查询和数据列 的特征的特征 。 (1) 数据库准则数据库准则 避免对经常更新的表创建过多的索引,并且列要尽可能避免对经常更新的表创建过多的索引,并且列要尽可能 少;使用多个索引可以提高更新少而数据量大的查询的性能。少;使用多个索引可以提高更新少而数据量大的查询的性能。 对小表进行索引可能不会产生优化效果对小表进行索引可能不会产生优化效果 。 当视图包含聚合、表联接或聚合和联接的组合时,视图当视图包含聚合、表联接或聚合和联接的组合时,视图 的索引可以显著地提升性能的索引可以显著地提升性能 。 2021-7-11010 8.1 使用索引使用索引 (2) 查询准

9、则查询准则 为经常用于查询中的谓词和联接条件的所有列创建非聚为经常用于查询中的谓词和联接条件的所有列创建非聚 集索引。集索引。 涵盖索引可以提高查询性能,因为符合查询要求的全部涵盖索引可以提高查询性能,因为符合查询要求的全部 数据都存在于索引本身中数据都存在于索引本身中 。 将插入或修改尽可能多的行的查询写入单个语句内,而将插入或修改尽可能多的行的查询写入单个语句内,而 不要使用多个查询更新相同的行。不要使用多个查询更新相同的行。 评估查询类型以及如何在查询中使用列评估查询类型以及如何在查询中使用列 。例如,在完全。例如,在完全 匹配查询类型中使用的列就适合用于非聚集索引或聚集索引。匹配查询类

10、型中使用的列就适合用于非聚集索引或聚集索引。 2021-7-11111 8.1 使用索引使用索引 (3) 列准则列准则 对于聚集索引,应保持较短的索引键长度。另外,对唯对于聚集索引,应保持较短的索引键长度。另外,对唯 一列或非空列创建聚集索引可以使聚集索引效率高一列或非空列创建聚集索引可以使聚集索引效率高 . 不能将不能将ntext、text、image、varchar(max)、 nvarchar(max)和和varbinary(max)数据类型的列指定为索引键数据类型的列指定为索引键 列列 ,不过,不过,varchar(max)、nvarchar(max)、varbinary(max) 和

11、和xml数据类型的列可以作为非键索引列参与非聚集索引。数据类型的列可以作为非键索引列参与非聚集索引。 xml数据类型的列只能在数据类型的列只能在XML索引中用作键列索引中用作键列 。 2021-7-11212 8.1 使用索引使用索引 如果索引包含多个列,则应考虑列的顺序如果索引包含多个列,则应考虑列的顺序 。 用于等于用于等于 (=)、大于、大于 ()、小于、小于 () 或或BETWEEN搜索条件搜索条件 的的WHERE子句或者参与联接的列应该放在最前面。其他列子句或者参与联接的列应该放在最前面。其他列 应该基于其非重复级别进行排序,就是说,从最不重复的列应该基于其非重复级别进行排序,就是说

12、,从最不重复的列 到最重复的列。到最重复的列。 考虑对计算列进行索引考虑对计算列进行索引 。 2021-7-11313 8.1 使用索引使用索引 (4) 索引特征索引特征 在确定某一索引适合某一查询之后,可以选择最适合具在确定某一索引适合某一查询之后,可以选择最适合具 体情况的索引类型。创建索引时需确定以下选项。体情况的索引类型。创建索引时需确定以下选项。 聚集还是非聚集聚集还是非聚集 唯一还是非唯一唯一还是非唯一 单列还是多列单列还是多列 索引中的列是升序排序还是降序排序索引中的列是升序排序还是降序排序 2021-7-11414 8.1 使用索引使用索引 n 创建索引创建索引 1. 创建索引

13、步骤如下:创建索引步骤如下: (1) 设计索引设计索引 索引设计包括确定要使用的列,选择索引类型索引设计包括确定要使用的列,选择索引类型(例如聚集例如聚集 或非聚集或非聚集),选择适当的索引选项,以及确定文件组或分区,选择适当的索引选项,以及确定文件组或分区 方案布置方案布置 。 (2) 确定最佳的创建方法确定最佳的创建方法 使用使用CREATE TABLE或或ALTER TABLE对列定义对列定义 PRIMARY KEY或或UNIQUE约束。约束。 2021-7-11515 8.1 使用索引使用索引 默认情况下,创建的唯一聚集索引可以强制默认情况下,创建的唯一聚集索引可以强制PRIMARY

14、KEY约束,除非表中已存在聚集索引或指定了唯一的非聚集约束,除非表中已存在聚集索引或指定了唯一的非聚集 索引。默认情况下,创建的唯一非聚集索引可以强制索引。默认情况下,创建的唯一非聚集索引可以强制 UNIQUE约束,除非已明确指定唯一的聚集索引且表中不存约束,除非已明确指定唯一的聚集索引且表中不存 在聚集索引。在聚集索引。 使用使用CREATE INDEX语句或语句或SQL Server Management Studio对象资源管理器中的对象资源管理器中的“新建索引新建索引”对话框创建独立于对话框创建独立于 约束的索引约束的索引 。 必须指定索引的名称、表以及应用该索引的列。还可以必须指定索

15、引的名称、表以及应用该索引的列。还可以 指定索引选项和索引位置、文件组或分区方案。默认情况下,指定索引选项和索引位置、文件组或分区方案。默认情况下, 如果未指定聚集或唯一选项,将创建非聚集的非唯一索引如果未指定聚集或唯一选项,将创建非聚集的非唯一索引 2021-7-11616 8.1 使用索引使用索引 (3) 创建索引创建索引 一个重要因素需要考虑:是对空表还是对包含数据的表一个重要因素需要考虑:是对空表还是对包含数据的表 创建索引。对空表创建索引在创建索引时不会对性能产生任创建索引。对空表创建索引在创建索引时不会对性能产生任 何影响,而向表中添加数据时,会对性能产生影响。何影响,而向表中添加

16、数据时,会对性能产生影响。 创建索引后,索引将自动启用并可以使用。可以通过禁创建索引后,索引将自动启用并可以使用。可以通过禁 用索引来删除对该索引的访问。用索引来删除对该索引的访问。 2021-7-11717 8.1 使用索引使用索引 2. 创建聚集索引创建聚集索引 用途:聚集索引可以提高查询性能,还可以按需重新生用途:聚集索引可以提高查询性能,还可以按需重新生 成或重新组织来控制表碎片,所以除了个别表之外,每个表成或重新组织来控制表碎片,所以除了个别表之外,每个表 都应该有聚集索引。也可以对视图创建聚集索引都应该有聚集索引。也可以对视图创建聚集索引 。 聚集索引按下列方式实现聚集索引按下列方

17、式实现 : PRIMARY KEY和和UNIQUE约束约束 在创建在创建PRIMARY KEY约束时,如果不存在该表的聚集约束时,如果不存在该表的聚集 索引且未指定唯一非聚集索引,则将自动对一列或多列创建索引且未指定唯一非聚集索引,则将自动对一列或多列创建 唯一聚集索引。主键列不允许空值。唯一聚集索引。主键列不允许空值。 在创建在创建UNIQUE约束时,默认情况下将创建唯一非聚集约束时,默认情况下将创建唯一非聚集 索引,以便强制索引,以便强制UNIQUE约束。如果不存在该表的聚集索引,约束。如果不存在该表的聚集索引, 则可以指定唯一聚集索引。则可以指定唯一聚集索引。 2021-7-11818

18、8.1 使用索引使用索引 将索引创建为约束的一部分后,会自动将索引命名为与将索引创建为约束的一部分后,会自动将索引命名为与 约束名称相同的名称。约束名称相同的名称。 独立于约束的索引独立于约束的索引 指定非聚集主键约束后,可以对非主键列的列创建聚集指定非聚集主键约束后,可以对非主键列的列创建聚集 索引索引 索引视图索引视图 若要创建索引视图,需要对一个或多个视图列定义唯一若要创建索引视图,需要对一个或多个视图列定义唯一 聚集索引。视图将具体化,并且结果集存储在该索引的页级聚集索引。视图将具体化,并且结果集存储在该索引的页级 别中,其存储方式与表数据存储在聚集索引中的方式相同别中,其存储方式与表

19、数据存储在聚集索引中的方式相同 。 2021-7-11919 8.1 使用索引使用索引 3. 创建非聚集索引创建非聚集索引 通常,创建非聚集索引是为了提高聚集索引未包含的常通常,创建非聚集索引是为了提高聚集索引未包含的常 用查询的性能。用查询的性能。 可以通过下列方法实现非聚集索引可以通过下列方法实现非聚集索引 : PRIMARY KEY和和UNIQUE约束约束 独立于约束的索引:默认情况下,如果未指定聚集,将独立于约束的索引:默认情况下,如果未指定聚集,将 创建非聚集索引创建非聚集索引 。 索引视图的非聚集索引:对视图创建唯一的聚集索引后,索引视图的非聚集索引:对视图创建唯一的聚集索引后,

20、便可以创建非聚集索引便可以创建非聚集索引 。 2021-7-12020 8.1 使用索引使用索引 4. 创建唯一索引创建唯一索引 创建唯一索引可以确保任何生成重复键值的尝试都会失创建唯一索引可以确保任何生成重复键值的尝试都会失 败。创建败。创建UNIQUE约束和创建与约束无关的唯一索引并没有约束和创建与约束无关的唯一索引并没有 明显的区别明显的区别 。 唯一索引可通过以下方式实现唯一索引可通过以下方式实现 : PRIMARY KEY或或UNIQUE约束约束 独立于约束的索引:可以为一个表定义多个唯一非聚集独立于约束的索引:可以为一个表定义多个唯一非聚集 索引索引 索引视图索引视图 如果在键列中

21、存在重复值,将无法创建唯一索引或约束如果在键列中存在重复值,将无法创建唯一索引或约束 2021-7-12121 8.1 使用索引使用索引 5. 使用使用Transact-SQL语句创建索引语句创建索引 使用使用CREATE INDEX语句可以创建索引,语法格式如下语句可以创建索引,语法格式如下 CREATE UNIQUE CLUSTERED | NONCLUSTERED INDEX index_name ON ( column ASC | DESC ,.n ) ; := database_name. schema_name . | schema_name. table_or_view_name

22、 2021-7-12222 8.1 使用索引使用索引 UNIQUE:为表或视图创建唯一索引。:为表或视图创建唯一索引。 唯一索引不允许两行具有相同的索引键值。视图的聚集唯一索引不允许两行具有相同的索引键值。视图的聚集 索引必须唯一。索引必须唯一。 CLUSTERED:为表或视图创建聚集索引:为表或视图创建聚集索引 。 一个表或视图只允许同时有一个聚集索引。为一个视图一个表或视图只允许同时有一个聚集索引。为一个视图 创建唯一聚集索引会在物理上具体化该视图。必须先为视图创建唯一聚集索引会在物理上具体化该视图。必须先为视图 创建唯一聚集索引,然后才能为该视图定义其他索引创建唯一聚集索引,然后才能为该

23、视图定义其他索引 。 NONCLUSTERED:为表或视图创建非聚集索引:为表或视图创建非聚集索引 。对。对 于非聚集索引,数据行的物理排序独立于索引排序于非聚集索引,数据行的物理排序独立于索引排序 。每个表。每个表 都最多可包含都最多可包含249个非聚集索引个非聚集索引 。 默认值为默认值为NONCLUSTERED 2021-7-12323 8.1 使用索引使用索引 index_name:索引的名称:索引的名称 。 在表或视图中必须唯一,但在数据库中不必唯一。索引在表或视图中必须唯一,但在数据库中不必唯一。索引 名称必须符合标识符的规则名称必须符合标识符的规则 。 主主XML索引名不得以索引

24、名不得以#、#、 或或字符开头。字符开头。 column:索引所基于的一列或多列:索引所基于的一列或多列 。 指定两个或多个列名,可为指定列的组合值创建组合索指定两个或多个列名,可为指定列的组合值创建组合索 引。在引。在table_or_view_name后的括号中,按排序优先级列出后的括号中,按排序优先级列出 组合索引中要包括的列组合索引中要包括的列 。 一个组合索引键中最多可组合一个组合索引键中最多可组合16列。组合索引键中的所列。组合索引键中的所 有列必须在同一个表或视图中有列必须在同一个表或视图中 。 2021-7-12424 8.1 使用索引使用索引 ASC | DESC :确定特定

25、索引列的升序或降序排序方式。:确定特定索引列的升序或降序排序方式。 默认值为默认值为ASC 。 :要为其建立索引的完全限定对象或非完全限:要为其建立索引的完全限定对象或非完全限 定对象。其中选项含义同其他命令。定对象。其中选项含义同其他命令。 例如:创建简单非聚集索引。以下示例为例如:创建简单非聚集索引。以下示例为teaching数据库数据库 中中student表的表的AGE列创建非聚集索引。列创建非聚集索引。 USE teaching GO CREATE INDEX IX_age ON student (AGE) GO 执行结果如图执行结果如图8.1所示。所示。 2021-7-12525 8

26、.1 使用索引使用索引 6. 使用图形工具创建索引使用图形工具创建索引 具体步骤详见教材具体步骤详见教材 2021-7-12626 8.1 使用索引使用索引 n 修改索引修改索引 1. 禁止索引禁止索引 索引定义保留在元数据中,非聚集索引的索引统计信息索引定义保留在元数据中,非聚集索引的索引统计信息 仍保留。对视图禁用非聚集索引或聚集索引会以物理方式删仍保留。对视图禁用非聚集索引或聚集索引会以物理方式删 除索引数据。禁用表的聚集索引可以防止对数据的访问,数除索引数据。禁用表的聚集索引可以防止对数据的访问,数 据仍保留在表中,但在删除或重新生成索引之前,无法对这据仍保留在表中,但在删除或重新生成

27、索引之前,无法对这 些数据执行些数据执行DML操作。操作。 在以下情况中可能禁用一个或多个索引在以下情况中可能禁用一个或多个索引 : (1) SQL Server 2005 Database Engine在在SQL Server升级升级 期间自动禁用索引期间自动禁用索引 。 (2) 使用使用ALTER INDEX手动禁用索引手动禁用索引 。 2021-7-12727 8.1 使用索引使用索引 ALTER INDEX命令语句的语法格式如下:命令语句的语法格式如下: ALTER INDEX index_name | ALL ON DISABLE 各选项含义如下:各选项含义如下: ALL:指定与表或

28、视图相关联的所有索引,而不考虑索:指定与表或视图相关联的所有索引,而不考虑索 引类型。引类型。 DISABLE:将索引标记为禁用,从而不能由:将索引标记为禁用,从而不能由SQL Server 2005 Database Engine使用使用 。 已禁用索引的索引定义保留在没有基础索引数据的系统已禁用索引的索引定义保留在没有基础索引数据的系统 目录中目录中 。禁用聚集索引将阻止用户访问基础表数据。禁用聚集索引将阻止用户访问基础表数据。 2021-7-12828 8.1 使用索引使用索引 例如:禁用索引。下面的示例禁用了对例如:禁用索引。下面的示例禁用了对course表的表的 IX_Cname索引

29、。索引。 USE teaching GO ALTER INDEX IX_Cname ON course DISABLE GO 2021-7-12929 8.1 使用索引使用索引 (3) 使用图形工具禁用索引使用图形工具禁用索引 具体步骤详见教材具体步骤详见教材 2021-7-13030 8.1 使用索引使用索引 2. 启用索引启用索引 索引被禁用后一直保持禁用状态,直到它重新生成或删索引被禁用后一直保持禁用状态,直到它重新生成或删 除除 。 可以使用下列方法之一,重新生成禁用的索引来启用它。可以使用下列方法之一,重新生成禁用的索引来启用它。 (1) 带带REBUILD子句的子句的ALTER I

30、NDEX语句语句 ALTER INDEX命令语句的语法格式如下。命令语句的语法格式如下。 ALTER INDEX index_name | ALL ON REBUILD 2021-7-13131 8.1 使用索引使用索引 REBUILD:指定将使用相同的列、索引类型、唯一性属:指定将使用相同的列、索引类型、唯一性属 性和排序顺序重新生成索引。性和排序顺序重新生成索引。REBUILD启用已禁用的索引。启用已禁用的索引。 例如:重新生成索引。以下示例在例如:重新生成索引。以下示例在Course表中重新生成表中重新生成 索引索引IX_Cname。 USE teaching GO ALTER INDE

31、X IX_Cname ON course REBUILD GO 2021-7-13232 8.1 使用索引使用索引 (2) 使用图形工具启用索引使用图形工具启用索引 具体步骤详见教材具体步骤详见教材 2021-7-13333 8.1 使用索引使用索引 3. 重命名索引重命名索引 重命名索引将用提供的新名称替换当前的索引名称重命名索引将用提供的新名称替换当前的索引名称 。 (1) 使用使用sp_rename系统过程重命名索引系统过程重命名索引 sp_rename系统过程的语法格式如下。系统过程的语法格式如下。 sp_rename objname = object_name , newname =

32、 new_name , objtype = object_type 2021-7-13434 8.1 使用索引使用索引 objname = object_name:用户对象或数据类型的:用户对象或数据类型的 当前限定或非限定名称当前限定或非限定名称 。 如果要重命名的对象是表中的列,则如果要重命名的对象是表中的列,则object_name的格式的格式 必须是必须是table.column。如果要重命名的对象是索引,则。如果要重命名的对象是索引,则 object_name的格式必须是的格式必须是table.index。 newname = new_name:指定对象的新名称:指定对象的新名称 。

33、 new_name的数据类型为的数据类型为sysname,无默认值,无默认值 。 objtype = object_type:要重命名的对象的类型:要重命名的对象的类型 。 object_type的数据类型为的数据类型为 varchar(13),默认值为,默认值为NULL, 可取可取COLUMN、DATABASE、INDEX、OBJECT、 USERDATATYPE,具体见表,具体见表8.1。 2021-7-13535 8.1 使用索引使用索引 例如:重命名索引。以下示例将例如:重命名索引。以下示例将course表中的表中的IX_Cname 索引重命名为索引重命名为IX_Course_Cnam

34、e。 USE teaching GO EXEC sp_rename N IX_Cname , N IX_Course_Cname , N INDEX (2) 使用图形工具重命名索引使用图形工具重命名索引 具体步骤详见教材具体步骤详见教材 2021-7-13636 8.1 使用索引使用索引 n 删除索引删除索引 当一个索引不再需要时,可以将其从数据库中删除,以当一个索引不再需要时,可以将其从数据库中删除,以 回收它当前使用的磁盘空间。以便数据库中的任何对象都可回收它当前使用的磁盘空间。以便数据库中的任何对象都可 以使用此回收的空间。以使用此回收的空间。 必须先删除必须先删除PRIMARY KEY

35、或或UNIQUE约束,才能删除约束,才能删除 约束使用的索引约束使用的索引 。 删除视图或表时,将自动删除为永久性和临时性视图或删除视图或表时,将自动删除为永久性和临时性视图或 表创建的索引表创建的索引 。 删除聚集索引后,存储在聚集索引叶级中的数据行将存删除聚集索引后,存储在聚集索引叶级中的数据行将存 储在未排序的表储在未排序的表(堆堆)中中 。 删除索引视图的聚集索引时,将自动删除同一视图的所删除索引视图的聚集索引时,将自动删除同一视图的所 有非聚集索引和自动创建的统计信息。手动创建的统计信息有非聚集索引和自动创建的统计信息。手动创建的统计信息 不会删除。不会删除。 2021-7-1373

36、7 8.1 使用索引使用索引 1. 使用使用Transact-SQL语句删除索引语句删除索引 可以使用可以使用DROP INDEX命令删除索引,语句的语法格式命令删除索引,语句的语法格式 如下。如下。 DROP INDEX index_name ON DROP INDEX语句不适用于通过定义语句不适用于通过定义PRIMARY KEY或或 UNIQUE约束创建的索引。这些约束是分别使用约束创建的索引。这些约束是分别使用CREATE TABLE或或ALTER TABLE语句的语句的PRIMARY KEY或或 UNIQUE选项创建的。选项创建的。 2021-7-13838 8.1 使用索引使用索引

37、例如:例如:删除索引。下列示例删除了删除索引。下列示例删除了student表中的表中的IX_age 索引。索引。 USE teaching GO DROP INDEX IX_age ON student GO 2. 使用图形工具删除索引使用图形工具删除索引 具体步骤详见教材具体步骤详见教材 2021-7-13939 8.2 使用视图使用视图 视图可以被看成是虚拟表或存储查询。除非是索引视图,视图可以被看成是虚拟表或存储查询。除非是索引视图, 否则视图的数据不会作为非重复对象存储在数据库中。否则视图的数据不会作为非重复对象存储在数据库中。 SELECT语句的结果集构成视图所返回的虚拟表。用户可以

38、语句的结果集构成视图所返回的虚拟表。用户可以 采用引用表时所使用的方法,在采用引用表时所使用的方法,在Transact-SQL语句中引用视语句中引用视 图名称来使用此虚拟表。图名称来使用此虚拟表。 2021-7-14040 8.2 使用视图使用视图 n 视图的作用视图的作用 视图是一个虚拟表,其内容由查询定义视图是一个虚拟表,其内容由查询定义 。通过视图进行。通过视图进行 查询没有任何限制,通过它们进行数据修改时的限制也很少查询没有任何限制,通过它们进行数据修改时的限制也很少 。 (1) 视图的类型视图的类型 标准视图标准视图 标准视图组合了一个或多个表中的数据,可以获得使用标准视图组合了一个

39、或多个表中的数据,可以获得使用 视图的大多数好处视图的大多数好处 索引视图索引视图 分区视图分区视图 分区视图在一台或多台服务器间水平连接一组成员表中分区视图在一台或多台服务器间水平连接一组成员表中 的分区数据的分区数据 2021-7-14141 8.2 使用视图使用视图 (2) 视图的使用视图的使用 视图可用作安全机制,它可以允许用户通过视图访问数视图可用作安全机制,它可以允许用户通过视图访问数 据,而不授予用户直接访问视图基础表的权限据,而不授予用户直接访问视图基础表的权限 使用视图有以下作用使用视图有以下作用 : 着重于特定数据着重于特定数据 视图使用户能够着重于所感兴趣的特定数据和所负

40、责的视图使用户能够着重于所感兴趣的特定数据和所负责的 特定任务。不必要的数据或敏感数据可以不出现在视图中特定任务。不必要的数据或敏感数据可以不出现在视图中 。 简化数据操作简化数据操作 可以将常用联接、投影、可以将常用联接、投影、UNION查询和查询和SELECT查询定查询定 义为视图,以便使用户不必在每次对该数据执行附加操作时义为视图,以便使用户不必在每次对该数据执行附加操作时 指定所有条件和条件限定。指定所有条件和条件限定。 2021-7-14242 8.2 使用视图使用视图 提供向后兼容性提供向后兼容性 视图能够在表的架构更改时为表创建向后兼容接口视图能够在表的架构更改时为表创建向后兼容

41、接口 。 自定义数据自定义数据 视图允许用户以不同方式查看数据,即使在他们同时使视图允许用户以不同方式查看数据,即使在他们同时使 用相同的数据时也是如此。这在具有许多不同目的和技术水用相同的数据时也是如此。这在具有许多不同目的和技术水 平的用户共用同一数据库时尤其有用。平的用户共用同一数据库时尤其有用。 例如,可创建一个视图以仅检索由客户经理处理的客户例如,可创建一个视图以仅检索由客户经理处理的客户 数据。该视图可以根据使用它的客户经理的登录数据。该视图可以根据使用它的客户经理的登录ID决定检索决定检索 哪些数据。哪些数据。 2021-7-14343 8.2 使用视图使用视图 导出和导入数据导

42、出和导入数据 可使用视图将数据导出到其他应用程序。可使用视图将数据导出到其他应用程序。 例如,可将例如,可将teaching数据库中的数据库中的student表、表、course表及表及 s_c表导出至表导出至Microsoft Excel中进行数据分析中进行数据分析 。 跨服务器组合分区数据跨服务器组合分区数据 Transact-SQL UNION集合运算符可在视图内使用,将单集合运算符可在视图内使用,将单 独表的两个或多个查询的结果组合到单一的结果集中。这在独表的两个或多个查询的结果组合到单一的结果集中。这在 用户看来是一个单独的表,称为分区视图用户看来是一个单独的表,称为分区视图 。 例

43、如,如果一个表包含天津的销售数据,另一个表包含例如,如果一个表包含天津的销售数据,另一个表包含 北京的销售数据,则可以对这两个表使用北京的销售数据,则可以对这两个表使用UNION创建一个创建一个 视图。该视图代表这两个地区的销售数据。视图。该视图代表这两个地区的销售数据。 2021-7-14444 8.2 使用视图使用视图 n 创建视图创建视图 若要创建视图,必须获得数据库所有者授予创建视图的若要创建视图,必须获得数据库所有者授予创建视图的 权限权限 。 在创建视图前需考虑如下规则在创建视图前需考虑如下规则 : 只能在当前数据库中创建视图只能在当前数据库中创建视图 。 视图名称必须遵循标识符的

44、规则,且对每个架构都必须视图名称必须遵循标识符的规则,且对每个架构都必须 唯一唯一 ,该名称不得与该架构包含的任何表的名称相同。,该名称不得与该架构包含的任何表的名称相同。 可以对其他视图创建视图可以对其他视图创建视图 。 不能将规则或不能将规则或DEFAULT定义与视图相关联定义与视图相关联 。 不能将不能将AFTER触发器与视图相关联,只有触发器与视图相关联,只有INSTEAD OF 触发器可以与之相关联触发器可以与之相关联 。 2021-7-14545 8.2 使用视图使用视图 定义视图的查询不能包含定义视图的查询不能包含COMPUTE子句、子句、COMPUTE BY子句或子句或 INT

45、O关键字关键字 。 定义视图的查询不能包含定义视图的查询不能包含ORDER BY子句,除非在子句,除非在SELECT语句的语句的 选择列表中还有一个选择列表中还有一个TOP子句。子句。 定义视图的查询不能包含指定查询提示的定义视图的查询不能包含指定查询提示的OPTION子句子句 。 不能创建临时视图,也不能对临时表创建视图不能创建临时视图,也不能对临时表创建视图 。 下列情况下必须指定视图中每列的名称下列情况下必须指定视图中每列的名称 视图中的任何列都是从算术表达式、内置函数或常量派生而来视图中的任何列都是从算术表达式、内置函数或常量派生而来 ; 视图中有两列或多列应具有相同名称视图中有两列或

46、多列应具有相同名称 ; 希望为视图中的列指定一个与其源列不同的名称希望为视图中的列指定一个与其源列不同的名称(也可以在视图中重也可以在视图中重 命名列命名列) 。无论重命名与否,视图列都会继承其源列的数据类型。无论重命名与否,视图列都会继承其源列的数据类型 。 2021-7-14646 8.2 使用视图使用视图 1. 使用使用Transact-SQL命令创建视图命令创建视图 可以使用可以使用CREATE VIEW命令创建视图,语句语法格式命令创建视图,语句语法格式 如下如下 : CREATE VIEW schema_name . view_name (column ,.n ) AS selec

47、t_statement WITH CHECK OPTION ; 2021-7-14747 8.2 使用视图使用视图 view_name:视图的名称:视图的名称 。 column ,.n :视图中的列使用的名称:视图中的列使用的名称 。 AS:指定视图要执行的操作:指定视图要执行的操作 。 select_statement:定义视图的:定义视图的SELECT语句语句 。 该语句可以使用多个表和其他视图该语句可以使用多个表和其他视图 。 WITH CHECK OPTION:强制针对视图执行的所有数:强制针对视图执行的所有数 据修改语句都必须符合在据修改语句都必须符合在select_statemen

48、t中设置的条件中设置的条件 。 通过视图修改行时,通过视图修改行时,WITH CHECK OPTION可确保提可确保提 交修改后,仍可通过视图看到数据。如果在交修改后,仍可通过视图看到数据。如果在select_statement 中的任何位置使用中的任何位置使用TOP,则不能指定,则不能指定CHECK OPTION。 2021-7-14848 8.2 使用视图使用视图 例如:使用例如:使用CREATE VIEW命令。以下示例使用简单命令。以下示例使用简单 SELECT语句创建视图语句创建视图 ,此视图的数据来自,此视图的数据来自teaching数据库数据库 的的student和和s_c表。这些

49、数据提供有关学生的学号、姓名以表。这些数据提供有关学生的学号、姓名以 及所选课程的课号和成绩及所选课程的课号和成绩 。 USE teaching GO CREATE VIEW student_view AS SELECT s.SNO, s.SNAME, sc.CNO, sc.GRADE FROM student s JOIN s_c sc on s.SNO=sc.SNO GO 2021-7-14949 8.2 使用视图使用视图 2. 使用图形工具创建视图使用图形工具创建视图 具体步骤详见教材具体步骤详见教材 2021-7-15050 8.2 使用视图使用视图 n 修改视图修改视图 视图定义后,

50、可以更改视图的名称或视图的定义而无需视图定义后,可以更改视图的名称或视图的定义而无需 删除并重新创建视图。删除并重新创建视图会造成与该视图删除并重新创建视图。删除并重新创建视图会造成与该视图 关联的权限丢失。关联的权限丢失。 1. 重命名视图重命名视图 在重命名视图时,需考虑以下原则。在重命名视图时,需考虑以下原则。 要重命名的视图必须位于当前数据库中。要重命名的视图必须位于当前数据库中。 新名称必须遵守标识符规则。新名称必须遵守标识符规则。 仅可以重命名具有更改权限的视图。仅可以重命名具有更改权限的视图。 数据库所有者可以更改任何用户视图的名称数据库所有者可以更改任何用户视图的名称 。 20

51、21-7-15151 8.2 使用视图使用视图 (1) 使用系统存储过程重命名视图使用系统存储过程重命名视图 可以使用系统存储过程可以使用系统存储过程sp_rename来重命名视图名称,与来重命名视图名称,与 重命名索引方法相同重命名索引方法相同 。 (2)使用图形工具重命名视图使用图形工具重命名视图 右击要重命名的视图,选择右击要重命名的视图,选择“重命名重命名”,然后输入新视,然后输入新视 图名称,回车即可图名称,回车即可 。 注意:重命名视图并不更改它在视图定义文本中的名称。注意:重命名视图并不更改它在视图定义文本中的名称。 要在定义中更改视图名称,应直接修改视图。要在定义中更改视图名称

52、,应直接修改视图。 2021-7-15252 8.2 使用视图使用视图 2. 修改视图定义修改视图定义 修改先前创建的视图,其中包括索引视图修改先前创建的视图,其中包括索引视图 。 (1) 使用使用Transact-SQL命令修改视图命令修改视图 可以使用可以使用ALTER VIEW命令修改视图定义,该命令不影命令修改视图定义,该命令不影 响相关的存储过程或触发器,并且不会更改权限响相关的存储过程或触发器,并且不会更改权限 。 语法格式如下语法格式如下 : ALTER VIEW schema_name . view_name ( column ,.n ) AS select_statement

53、 WITH CHECK OPTION ; 2021-7-15353 8.2 使用视图使用视图 注意:如果原来的视图定义是使用注意:如果原来的视图定义是使用WITH CHECK OPTION创建的,创建的, 则只有在则只有在ALTER VIEW中也包含这些选项时,才会启用这些选项中也包含这些选项时,才会启用这些选项 。 例如:修改例如:修改teaching数据库中的视图数据库中的视图student_view,使其只包含女学,使其只包含女学 生的选课信息。生的选课信息。 USE teaching GO ALTER VIEW student_view AS SELECT s.SNO, s.SNAME

54、, sc.CNO, sc.GRADE FROM student s JOIN s_c sc on s.SNO=sc.SNO WHERE s.SEX=F GO (2) 使用图形工具修改视图使用图形工具修改视图 具体步骤详见教材具体步骤详见教材 2021-7-15454 8.2 使用视图使用视图 3. 通过视图修改数据通过视图修改数据 可以通过视图修改基础表的数据,修改方式与通过可以通过视图修改基础表的数据,修改方式与通过 UPDATE、INSERT和和DELETE命令修改表中数据的方式一命令修改表中数据的方式一 样样 。但是,以下限制应用于更新视图,但不应用于更新表。但是,以下限制应用于更新视图

55、,但不应用于更新表 。 任何修改任何修改(包括包括UPDATE、INSERT和和DELETE语句语句)都只都只 能引用一个基础表的列能引用一个基础表的列 。 视图中被修改的列必须直接引用表列中的基础数据,不视图中被修改的列必须直接引用表列中的基础数据,不 能通过其他方式派生能通过其他方式派生 。 正在修改的列不受正在修改的列不受GROUP BY、HAVING或或DISTINCT 子句的影响。子句的影响。 2021-7-15555 8.2 使用视图使用视图 如果在视图定义中使用了如果在视图定义中使用了WITH CHECK OPTION子句,子句, 则所有在视图上执行的数据修改语句都必须符合定义视

56、图的则所有在视图上执行的数据修改语句都必须符合定义视图的 SELECT语句中所设置的条件。如果使用了语句中所设置的条件。如果使用了WITH CHECK OPTION子句,修改行时需注意不让它们在修改完成后从视子句,修改行时需注意不让它们在修改完成后从视 图中消失图中消失 。 INSERT语句必须为不允许空值并且没有语句必须为不允许空值并且没有DEFAULT定义定义 的基础表中的所有列指定值。的基础表中的所有列指定值。 在基础表的列中修改的数据必须符合对这些列的约束,在基础表的列中修改的数据必须符合对这些列的约束, 例如为空性、约束及例如为空性、约束及DEFAULT定义等。定义等。 2021-7

57、-15656 8.2 使用视图使用视图 (1) 通过视图添加数据通过视图添加数据 例如:通过视图将数据加载到基础表。以下示例在例如:通过视图将数据加载到基础表。以下示例在 INSERT命令中指定一个视图名,但执行后系统将新行插入命令中指定一个视图名,但执行后系统将新行插入 到该视图的基础表中。到该视图的基础表中。INSERT语句中语句中VALUES列表的顺序列表的顺序 必须与视图的列顺序相匹配必须与视图的列顺序相匹配 。 2021-7-15757 8.2 使用视图使用视图 USE teaching GO CREATE VIEW stu_male_view AS SELECT SNO, SNAM

58、E, AGE FROM student WHERE SEX=M GO INSERT INTO stu_male_view VALUES (S6, HUANG, 21) GO SELECT * FROM student GO SELECT * FROM stu_male_view GO 对视图对视图stu_male_view增加的数据反映到基础表增加的数据反映到基础表student中,即:中,即: INSERT INTO stu_male_view VALUES (S6, HUANG, 21)语句转变为:语句转变为: INSERT INTO student VALUES (S6, HUANG, M, 21) 2021-7-15858 8.2 使用视图使用视图 (2) 通过视图更改数据通过视图更改数据 例如:通过视图将数据修改到基础表。以下示例在例如:通过视图将数据修改到基础表。以下示例在 UPDATE语句中指定一个视图名,但将修改的数据反映到该语句中指定一个视图名,但将修改的数据反映到该 视图的基础表中视图的基础表中 。 USE teaching GO CREATE VIEW stu_male_view AS SELECT SNO, SNAME, AGE FROM student 2021-7-15959 8.2 使用视图使用视图 WHERE SEX=M GO UPDATE st

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论