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

下载本文档

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

文档简介

1、第第9 9章章 视图与索引视图与索引 在对数据库进行操作时,用户总是希望能够快速并准在对数据库进行操作时,用户总是希望能够快速并准 确得到所要求的数据,而适当使用视图和索引可以提高数确得到所要求的数据,而适当使用视图和索引可以提高数 据存取的性能及操作速度,加快查询数据的效率。据存取的性能及操作速度,加快查询数据的效率。 本章将详细介绍视图和索引的概念,以及创建和管理本章将详细介绍视图和索引的概念,以及创建和管理 索引和视图的方法。索引和视图的方法。 9.1 9.1 视图的基础知识视图的基础知识 视图是一个虚拟表,其内容由查询定义。同真实的表视图是一个虚拟表,其内容由查询定义。同真实的表 一样

2、,视图包含一系列带有名称的列和行数据。视图实际上一样,视图包含一系列带有名称的列和行数据。视图实际上 就是给查询语句指定一个名字,将查询语句定义为一个独立就是给查询语句指定一个名字,将查询语句定义为一个独立 的对象保存。的对象保存。 9.1.1 9.1.1 视图的概念视图的概念 视图是从一个或多个基本表中导出的表,其结构是建立在对表的查视图是从一个或多个基本表中导出的表,其结构是建立在对表的查 询基础上的,但从本质上来说,视图不是真实存在的表,而是一张虚拟询基础上的,但从本质上来说,视图不是真实存在的表,而是一张虚拟 表,视图所对应的数据并不实际地存储在数据库中,而是存储在视图所表,视图所对应

3、的数据并不实际地存储在数据库中,而是存储在视图所 引用的基本表中。行和列数据来自由定义视图的查询所引用的表,并且引用的基本表中。行和列数据来自由定义视图的查询所引用的表,并且 在引用视图时动态生成。可以这样给视图下一个定义:在引用视图时动态生成。可以这样给视图下一个定义: 视图是基于一个或多个数据表的动态数据集合,是一个逻辑上的虚视图是基于一个或多个数据表的动态数据集合,是一个逻辑上的虚 拟数据表。拟数据表。 视图被定义后便存储在数据库中,对视图的操作与对表的操作一样视图被定义后便存储在数据库中,对视图的操作与对表的操作一样 ,可以对其进行查询、修改和删除,并且可以在视图的基础上再定义视,可以

4、对其进行查询、修改和删除,并且可以在视图的基础上再定义视 图。图。 对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的对其中所引用的基础表来说,视图的作用类似于筛选。定义视图的 筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。筛选可以来自当前或其他数据库的一个或多个表,或者其他视图。 9.1.2 9.1.2 视图的作用视图的作用 使用视图主要有以下几个方面的作用:使用视图主要有以下几个方面的作用: 1. 1. 简化用户操作简化用户操作 视图可以简化用户对数据的理解,可能有些使用数据库的用户不能熟视图可以简化用户对数据的理解,可能有些使用数据库的用户不能熟 练掌握数据库的查询操

5、作,尤其是多表的连接查询,那么可以把经常要练掌握数据库的查询操作,尤其是多表的连接查询,那么可以把经常要 使用的查询定义为视图,使他们在不需要太多数据库知识的情况下可以使用的查询定义为视图,使他们在不需要太多数据库知识的情况下可以 按自己的习惯简单方便的输入、查看和修改删除数据。这样,也可以简按自己的习惯简单方便的输入、查看和修改删除数据。这样,也可以简 化他们的操作。化他们的操作。 2. 2. 简化用户权限管理简化用户权限管理 视图可以让不同的用户以不同的方式看到不同或者相同的数据集。因视图可以让不同的用户以不同的方式看到不同或者相同的数据集。因 此,当不同水平的用户共用同一个数据库时,为不

6、同用户创建不同视图,此,当不同水平的用户共用同一个数据库时,为不同用户创建不同视图, 只授予使用视图的权限而不允许访问表,这样就不必在数据表中针对某只授予使用视图的权限而不允许访问表,这样就不必在数据表中针对某 些用户对某些字段设置不同权限了。些用户对某些字段设置不同权限了。 3. 3. 安全保护功能安全保护功能 视图用户只能查看和修改他们所能看到的数据,其它的表既不可见也视图用户只能查看和修改他们所能看到的数据,其它的表既不可见也 不可访问。可以像使用表一样对视图授予或者撤销访问权限,从而在限不可访问。可以像使用表一样对视图授予或者撤销访问权限,从而在限 制表用户的基础上进一步限制视图用户,

7、从而提供了对数据的安全保护制表用户的基础上进一步限制视图用户,从而提供了对数据的安全保护 功能。功能。 4. 4. 重新组织数据重新组织数据 使用视图可以重新组织数据以便输出到其他应用程序中,可以将多个使用视图可以重新组织数据以便输出到其他应用程序中,可以将多个 物理数据库抽象为一个逻辑数据库。物理数据库抽象为一个逻辑数据库。 9.1.3 9.1.3 视图的类型视图的类型 SQL Server2008SQL Server2008中,视图可以分为标准视图、索引视图和分区视图。中,视图可以分为标准视图、索引视图和分区视图。 1. 1. 标准视图标准视图 标准视图组合了一个或多个表中的数据,可以获得

8、使用视图的大多数标准视图组合了一个或多个表中的数据,可以获得使用视图的大多数 好处,可以实现对数据库的查询、修改和删除等基本操作。好处,可以实现对数据库的查询、修改和删除等基本操作。 2. 2. 索引视图索引视图 索引视图是被具体化了的视图,它已经过计算并存储。可以为视图创索引视图是被具体化了的视图,它已经过计算并存储。可以为视图创 建索引,即对视图创建一个唯一的聚集索引。索引视图可以显著提高某建索引,即对视图创建一个唯一的聚集索引。索引视图可以显著提高某 些类型查询的性能。索引视图尤其适于聚合许多行的查询。但不太适合些类型查询的性能。索引视图尤其适于聚合许多行的查询。但不太适合 于经常更新的

9、基本数据集。于经常更新的基本数据集。 3. 3. 分区视图分区视图 分区视图在一台或多台服务器间水平连接一组成员表中的分区数据分区视图在一台或多台服务器间水平连接一组成员表中的分区数据 这样,数据看上去如同来自于一个表。这样,数据看上去如同来自于一个表。 9.2 9.2 创建视图创建视图 SQL Server SQL Server提供两种方法创建视图:一种是使用提供两种方法创建视图:一种是使用SQLSQL Server Management Studio Server Management Studio工具创建视图;一种使用工具创建视图;一种使用 Transact-SQLTransact-SQ

10、L语句中的语句中的CREAT VIEWCREAT VIEW修改视图。修改视图。 9.2.1 9.2.1 使用使用SQL Server Management StudioSQL Server Management Studio工具创建视图工具创建视图 在在SQL Server Management StudioSQL Server Management Studio中创建视图简单直观且方便,具中创建视图简单直观且方便,具 体操作步骤如下:体操作步骤如下: 1) 1) 打开打开“SQL Server Management Studio”SQL Server Management Studio”窗口

11、,在左边的窗口,在左边的“对象资源对象资源 管理管理 器器”中中“数据库数据库”选项,展开要建立视图的具体数据库,然后鼠标右键单选项,展开要建立视图的具体数据库,然后鼠标右键单 击击 其下的其下的“视图视图”对象,在弹出的菜单中选择对象,在弹出的菜单中选择“新建视图新建视图”项。项。 2) 2) 如图如图9-19-1所示,在打开的所示,在打开的“添加表添加表”对话框中,在对话框中,在“表表”选项卡中选中选项卡中选中 创建创建 视图的表,可以用视图的表,可以用CtrlCtrl键和键和ShiftShift键配合鼠标以选择多张表,单击按钮,键配合鼠标以选择多张表,单击按钮, 然后单击按钮关闭该对话框

12、。然后单击按钮关闭该对话框。 3) 3) 此时进入到视图的设计窗口,如图此时进入到视图的设计窗口,如图9-29-2所示,窗口有四个子窗口,工具所示,窗口有四个子窗口,工具 栏中图标分别控制这四个窗口的显示。第一个子窗口是栏中图标分别控制这四个窗口的显示。第一个子窗口是“关系图窗格关系图窗格”,以,以 图形的方式显示添加的表结构,如果添加了多张表,则表与表之间的关系图形的方式显示添加的表结构,如果添加了多张表,则表与表之间的关系 也会显示,在这个窗口中,用户可以选择列。第二个窗口是也会显示,在这个窗口中,用户可以选择列。第二个窗口是“条件窗格条件窗格”, 显示用户所选择的列,并设置列的属性,自动

13、生成且可修改。第三个窗口显示用户所选择的列,并设置列的属性,自动生成且可修改。第三个窗口 是是“SQLSQL窗格窗格”,显示用户设置视图的,显示用户设置视图的Transact-SQLTransact-SQL语句,自动生成且可修语句,自动生成且可修 改。改。 第四个窗口是第四个窗口是“结果窗格结果窗格”,用来显示视图的执行结果。,用来显示视图的执行结果。 4) 4) 如果想继续添加表创建视图,可以右键单击第一个窗口中,在弹出的如果想继续添加表创建视图,可以右键单击第一个窗口中,在弹出的 快捷菜单中选择快捷菜单中选择“添加表添加表”。或者不想用添加的某张表,可以右键单击要。或者不想用添加的某张表,

14、可以右键单击要 删除的表,在弹出的快捷菜单中选择删除的表,在弹出的快捷菜单中选择“删除删除”将表移除。将表移除。 5) 5) 单击第一个窗口中表结构字段名前的复选框,为创建的视图添加或删单击第一个窗口中表结构字段名前的复选框,为创建的视图添加或删 除列,可以看到第二和第三个窗口中内容有相应的变化,在第二个窗口除列,可以看到第二和第三个窗口中内容有相应的变化,在第二个窗口 中还可以修改某些列的属性,如列别名、排序方式和顺序、一些约束等中还可以修改某些列的属性,如列别名、排序方式和顺序、一些约束等 ,第三个窗格中的,第三个窗格中的SQLSQL语句有相应变化。语句有相应变化。 6) 6) 在创建的视

15、图中添加好列和列的属性之后,单击执行在创建的视图中添加好列和列的属性之后,单击执行SQLSQL语句创建视语句创建视 图。这时在第四个窗口中会看到查询语句执行的结果。如图图。这时在第四个窗口中会看到查询语句执行的结果。如图9-39-3所示。所示。 7) 7) 单击保存按钮,在弹出的图单击保存按钮,在弹出的图9-49-4的选择名称对话框中输入视图的名字,的选择名称对话框中输入视图的名字, 然后单击然后单击“确定确定”,即完成了视图的创建操作。这时,刷新视图文件夹,即完成了视图的创建操作。这时,刷新视图文件夹, 可以看到新建的视图。可以看到新建的视图。 9.2.2 9.2.2 使用使用Transac

16、t-SQLTransact-SQL语句创建视图语句创建视图 下面介绍使用下面介绍使用CREATE VIEWCREATE VIEW语句创建视图的方法,其语法形式如下:语句创建视图的方法,其语法形式如下: CREATE VIEW schema_name view_name ( column CREATE VIEW schema_name view_name ( column ,n ) n ) WITH ,n WITH ,n AS select_statement AS select_statement WITH CHECK OPTION WITH CHECK OPTION 其中:其中: schem

17、a_nameschema_name:视图所属框架的名称。:视图所属框架的名称。 view_nameview_name:视图的名称。视图名称必须符合标识符的命名规则。:视图的名称。视图名称必须符合标识符的命名规则。 columncolumn:视图中的列使用的名称。如果未指定:视图中的列使用的名称。如果未指定columncolumn,则视图列将获得与,则视图列将获得与 SELECTSELECT语句中的列相同的名称。语句中的列相同的名称。 select_statementselect_statement:定义视图的:定义视图的SELECTSELECT语句。该语句可以使用多个表和其语句。该语句可以使用

18、多个表和其 他视图。需要相应的权限才能在已创建视图的他视图。需要相应的权限才能在已创建视图的SELECTSELECT子句引用的对象中选子句引用的对象中选 择。择。 WITH CHECK OPTIONWITH CHECK OPTION:强制针对视图执行的所有数据修改语句都必须符合:强制针对视图执行的所有数据修改语句都必须符合 在在select_statementselect_statement中设置的条件。通过视图修改行时,中设置的条件。通过视图修改行时,WITH CHECK WITH CHECK OPTION OPTION可确保提交修改后,仍可通过视图看到数据。可确保提交修改后,仍可通过视图看

19、到数据。 包括:包括:ENCRYPTIONENCRYPTION,对,对CREATE VIEWCREATE VIEW语句文本的项进行语句文本的项进行 加密;加密;SCHEMABIONDINGSCHEMABIONDING,将视图绑定到基础表的架构;,将视图绑定到基础表的架构;VIEW_METADATAVIEW_METADATA, 指定为引用视图的查询请求浏览模式的元数据时,指定为引用视图的查询请求浏览模式的元数据时,SQL ServerSQL Server实例将向实例将向 DB-LibraryDB-Library、ODBCODBC和和OLE DB APIOLE DB API返回有关视图的元数据信息

20、。返回有关视图的元数据信息。 这里需要注意的是:这里需要注意的是: CREATE VIEW CREATE VIEW必须是查询批处理中的第一句。必须是查询批处理中的第一句。 视图定义中的视图定义中的SELECTSELECT子句不能包含下列内容:子句不能包含下列内容: 1) 1) COMPUTECOMPUTE或或COMPUTE BYCOMPUTE BY子句。子句。 2) 2) ORDER BYORDER BY子句,除非在子句,除非在SELECTSELECT语句的选择列表中也有一个语句的选择列表中也有一个TOPTOP子句。子句。 3) 3) INTOINTO关键字。关键字。 4) 4) OPTION

21、OPTION子句。子句。 5) 5) 引用临时表或表变量。引用临时表或表变量。 【例【例9-19-1】创建完整的计算机系部门的读者借阅信息视图】创建完整的计算机系部门的读者借阅信息视图“计算机系读者计算机系读者 借阅情况借阅情况”,并禁止用户查看视图的定义语句。,并禁止用户查看视图的定义语句。 创建视图可以使用如下语句:创建视图可以使用如下语句: CREATE VIEW CREATE VIEW 计算机系读者借阅情况计算机系读者借阅情况 WITH ENCRYPTIONWITH ENCRYPTION AS AS SELECT U.UserId,U.UserName,UserSex,CateName

22、,UserDep,UserAdd, SELECT U.UserId,U.UserName,UserSex,CateName,UserDep,UserAdd, UserTel,UserReg,UserBkNum,BookId,LendDate,RtnDate UserTel,UserReg,UserBkNum,BookId,LendDate,RtnDate FROM UserTb U join Lending L on U.UserId=L.UserId FROM UserTb U join Lending L on U.UserId=L.UserId WHERE UserDep like% W

23、HERE UserDep like%计算机系计算机系% GO GO 执行以上语句后,使用执行以上语句后,使用SELECTSELECT语句语句 查询视图:查询视图: SELECT SELECT * * FROM FROM 计算机系读者借阅情况计算机系读者借阅情况 在查询页中输入以上代码,单击按在查询页中输入以上代码,单击按 钮,可以看到结果如图钮,可以看到结果如图9-59-5所示。所示。 9.3 9.3 修改、删除和重命名视图修改、删除和重命名视图 9.3.1 9.3.1 修改视图修改视图 修改视图的定义有两种方法:一是使用修改视图的定义有两种方法:一是使用SQL Server Manageme

24、ntSQL Server Management Studio Studio工具修改视图定义,二是通过书写工具修改视图定义,二是通过书写Transact-SQLTransact-SQL语句修改视图定语句修改视图定 义。下面分别介绍两种方法。义。下面分别介绍两种方法。 1. 1. 使用使用SQL Server Management StudioSQL Server Management Studio工具修改视图定义工具修改视图定义 下面介绍使用工具修改视图定义的步骤。下面介绍使用工具修改视图定义的步骤。 1 1)打开)打开“SQL Server Management Studio”SQL Serv

25、er Management Studio”窗口,在左边的窗口,在左边的“对象资源管对象资源管 理器理器”中中“数据库数据库”选项,展开要建立视图的具体数据库,单击其下的选项,展开要建立视图的具体数据库,单击其下的“视视 图图”对象,在打开的视图列表中右键选中要修改的视图。对象,在打开的视图列表中右键选中要修改的视图。 2) 2) 在弹出的快捷菜单中选择在弹出的快捷菜单中选择“设计设计”,则会打开一个与创建视图一样的,则会打开一个与创建视图一样的 设设 计窗口,用户可以在该窗口中修改视图的定义,比如添加或删除一张表,计窗口,用户可以在该窗口中修改视图的定义,比如添加或删除一张表, 添加或删除一个

26、选中的字段等。修改完毕后,单击添加或删除一个选中的字段等。修改完毕后,单击“确定确定”按钮完成修改。按钮完成修改。 2. 2. 使用使用ALTER VIEWALTER VIEW语句修改视图定义语句修改视图定义 使用使用Transact-SQLTransact-SQL语句修改视图定义需要使用语句修改视图定义需要使用ALTER VIEWALTER VIEW语句,语句, ALTER VIEWALTER VIEW语句的语法格式如下:语句的语法格式如下: ALTER VIEW schema_name view_name ( column ,n ) ALTER VIEW schema_name view_

27、name ( column ,n ) WITH ,n WITH ,n AS select_statementAS select_statement WITH CHECK OPTION WITH CHECK OPTION 各个子句的说明与创建视图的语句一致。各个子句的说明与创建视图的语句一致。 【例【例9-29-2】修改】修改9.2.29.2.2节【例节【例9-19-1】所创建的】所创建的“计算机系读者借阅情况计算机系读者借阅情况”视图视图 ,使其显示计算机系教师读者的借阅情况,且不需要显示读者的地址和电,使其显示计算机系教师读者的借阅情况,且不需要显示读者的地址和电 话信息。话信息。 修改视图

28、定义的代码如下:修改视图定义的代码如下: ALTER VIEW ALTER VIEW 计算机系读者借阅情况计算机系读者借阅情况 WITH ENCRYPTIONWITH ENCRYPTION AS AS SELECT U.UserId,U.UserName,UserSex,CateName,UserDep,UserReg, SELECT U.UserId,U.UserName,UserSex,CateName,UserDep,UserReg, UserBkNum,BookId,LendDate,RtnDate UserBkNum,BookId,LendDate,RtnDate FROM User

29、Tb U join Lending L on U.UserId=L.UserId FROM UserTb U join Lending L on U.UserId=L.UserId WHERE UserDep like% WHERE UserDep like%计算机系计算机系%and CateName=%and CateName=教师教师 GOGO 执行以上语句后,使用执行以上语句后,使用SELECTSELECT语句查询语句查询 视图:视图: SELECT SELECT * * FROM FROM 计算机系读者借阅情况计算机系读者借阅情况 在查询页中输入以上代码,单击按钮,在查询页中输入以上代

30、码,单击按钮, 可以看到结果如图可以看到结果如图9-69-6所示。所示。 9.3.2 9.3.2 删除视图删除视图 视图可以使用视图可以使用Management StudioManagement Studio工具删除,也可以使用工具删除,也可以使用Transact-SQLTransact-SQL 语句删除。语句删除。 1. 1. 使用使用SQL Server Management StudioSQL Server Management Studio工具删除视图工具删除视图 使用工具删除视图的步骤如下:使用工具删除视图的步骤如下: 1 1) 打开打开“SQL Server Management

31、Studio”SQL Server Management Studio”窗口,在左边的窗口,在左边的“对象资源管对象资源管 理器理器”中中“数据库数据库”选项,展开要建立视图的具体数据库,单击其下的选项,展开要建立视图的具体数据库,单击其下的“视视 图图”对象,在打开的视图列表中右键选中要删除的视图。对象,在打开的视图列表中右键选中要删除的视图。 2) 2) 在弹出的快捷菜单中选择在弹出的快捷菜单中选择“删除删除”命令,会出现命令,会出现“删除对象删除对象”对话框,对话框, 该对话框中,单击该对话框中,单击“确定确定”按钮,即可删除该视图。单击对话框中下部的按钮,即可删除该视图。单击对话框中下

32、部的 “显示依赖关系显示依赖关系”则可以显示该视图依赖的对象及依赖于该视图的对象。则可以显示该视图依赖的对象及依赖于该视图的对象。 2. 2. 使用使用DROP VIEWDROP VIEW语句删除视图语句删除视图 使用使用Transact-SQLTransact-SQL语句的语句的DROP VIEWDROP VIEW命令删除视图,其语法形式如下:命令删除视图,其语法形式如下: DROP VIEW schema_name view_name ,n DROP VIEW schema_name view_name ,n 使用该命令可以同时删除多个视图,多个视图名称之间用逗号间隔。使用该命令可以同时删

33、除多个视图,多个视图名称之间用逗号间隔。 【例【例9-39-3】删除视图】删除视图book_viewbook_view DROP VIEW book_view DROP VIEW book_view 9.3.3 9.3.3 重命名视图重命名视图 在在Management StudioManagement Studio中,选择要重命名的视图,右键单击,在弹出的中,选择要重命名的视图,右键单击,在弹出的 快捷菜单中选择快捷菜单中选择“重命名重命名”选项即可。选项即可。 或者可以使用系统存储过程或者可以使用系统存储过程sp_renamesp_rename来重命名视图,其语法形式如下:来重命名视图,其

34、语法形式如下: sp_name object_name, new_namesp_name object_name, new_name 其中:其中: object_nameobject_name:当前的视图名:当前的视图名 new_namenew_name:指定对象的新名称。:指定对象的新名称。 【例【例9-49-4】将视图】将视图“计算机系读者借阅情况计算机系读者借阅情况”重命名为重命名为“计算机系教师借阅计算机系教师借阅 情况情况” 实现代码如下:实现代码如下: EXEC sp_rename EXEC sp_rename 计算机系读者借阅情况计算机系读者借阅情况,计算机系教师借阅情况计算机系

35、教师借阅情况 9.4 使用视图操作数据表 除了在除了在SELECTSELECT中使用视图作为数据源进行查询以外,还可以通过视图中使用视图作为数据源进行查询以外,还可以通过视图 对数据表的数据进行添加、修改和删除的操作。对数据表的数据进行添加、修改和删除的操作。 使用视图对数据表的记录进行操作时,所创建的视图必须满足如下的要使用视图对数据表的记录进行操作时,所创建的视图必须满足如下的要 求:求: 1) 1) 修改视图中的数据时,不能同时修改两个或者多个基本表,当对基于两修改视图中的数据时,不能同时修改两个或者多个基本表,当对基于两 个或多个表创建的视图进行修改时,每次的修改只能影响一张基本表。个

36、或多个表创建的视图进行修改时,每次的修改只能影响一张基本表。 2) 2) 视图的字段中不能包含计算列,计算列是不能更新的。视图的字段中不能包含计算列,计算列是不能更新的。 3) 3) 如果在创建视图时指定了如果在创建视图时指定了WITH CHECK OPTIONWITH CHECK OPTION选项,那么使用视图修改选项,那么使用视图修改 数据库时,必须保证修改后的数据满足视图定义的要求。数据库时,必须保证修改后的数据满足视图定义的要求。 4) 4) 如果在视图定义中使用了如果在视图定义中使用了GROUP BYGROUP BY、UNIONUNION、DISTINCTDISTINCT或或TOPT

37、OP子句,则视子句,则视 图不允许更新。图不允许更新。 5) 5) 如果在视图定义中有嵌套查询,并且内层查询的如果在视图定义中有嵌套查询,并且内层查询的FROMFROM子句中涉及的表也子句中涉及的表也 是导出该视图的基本表,则视图不允许更新。是导出该视图的基本表,则视图不允许更新。 9.5 9.5 查看视图信息查看视图信息 SQL Server SQL Server允许用户获得视图的一些信息,如视图的基本信息、允许用户获得视图的一些信息,如视图的基本信息、 的定义信息、视图与其他对象间的依赖关系等。这些信息可以通过相应的的定义信息、视图与其他对象间的依赖关系等。这些信息可以通过相应的 系统存储

38、过程来查看。系统存储过程来查看。 1. 1. 查看视图的基本信息查看视图的基本信息 可以使用系统存储过程可以使用系统存储过程sp_helpsp_help来显示视图的名称、所有者、创建时间、来显示视图的名称、所有者、创建时间、 列信息等。如图列信息等。如图9-79-7所示,查看视图所示,查看视图book_viewbook_view的基本信息。的基本信息。 2. 2. 查看视图的定义信息查看视图的定义信息 如果视图在创建的时候没有被加密,则可以使用系统存储过程如果视图在创建的时候没有被加密,则可以使用系统存储过程 sp_helptextsp_helptext显示视图的定义信息。显示视图的定义信息。

39、 【例【例9-59-5】查看视图】查看视图“book_view”book_view”的定义信息的定义信息 EXEC sp_helptext book_viewEXEC sp_helptext book_view 在查询页中输入以上代码,单击按钮,结果如图在查询页中输入以上代码,单击按钮,结果如图9-89-8所示。所示。 【例【例9-69-6】查看视图】查看视图“计算机系教师借阅信息计算机系教师借阅信息”的定义信息的定义信息 EXEC sp_helptext EXEC sp_helptext 计算机系教师借阅情况计算机系教师借阅情况 在查询页中输入以上代码,单击按钮,结果如图在查询页中输入以上代

40、码,单击按钮,结果如图9-99-9所示。所示。 因为在创建视图因为在创建视图“计算机系教师借阅情况计算机系教师借阅情况” 时已加密,所以查询结果给出文本已加密时已加密,所以查询结果给出文本已加密 的提示。的提示。 3. 3. 查看视图与其他对象间的依赖关系查看视图与其他对象间的依赖关系 使用系统存储过程使用系统存储过程sp_dependssp_depends查看视图与其他对象间的依赖关系,如,查看视图与其他对象间的依赖关系,如, 视图在哪些表的基础上创建、有哪些数据库对象的定义引用了该视图等。视图在哪些表的基础上创建、有哪些数据库对象的定义引用了该视图等。 【例【例9-79-7】查看视图】查看

41、视图“计算机系教师借阅情况计算机系教师借阅情况”的依赖关系的依赖关系 EXEC sp_depends EXEC sp_depends 计算机系教师借阅情况计算机系教师借阅情况 在查询页中输入以上代码,单击按钮,结果如图在查询页中输入以上代码,单击按钮,结果如图9-109-10所示。所示。 9.6 9.6 索引概述索引概述 在日常生活中,我们经常会用到索引,如图书的目录、在日常生活中,我们经常会用到索引,如图书的目录、 词典的索引等。利用索引,我们可以很快地找到需要找的东词典的索引等。利用索引,我们可以很快地找到需要找的东 西。在对数据库进行操作时,用到索引可以提高数据存取的西。在对数据库进行操

42、作时,用到索引可以提高数据存取的 性能及操作的速度,从而使用户能够较快地查询并准确地得性能及操作的速度,从而使用户能够较快地查询并准确地得 到希望的数据。到希望的数据。 本章将介绍索引的概念、类型以及创建和管理索引的方本章将介绍索引的概念、类型以及创建和管理索引的方 法。法。 9.6.1 9.6.1 什么是索引什么是索引 索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列 值得集合和相应的指向表中物理标识这些值得数据页的逻辑指针清单。索值得集合和相应的指向表中物理标识这些值得数据页的逻辑指针清单。索 引是数据库中一种常用且重

43、要的数据库对象,它类似于图书中的目录。在引是数据库中一种常用且重要的数据库对象,它类似于图书中的目录。在 数据库中,索引使数据库程序不需要对整个表进行扫描就能在其中找到所数据库中,索引使数据库程序不需要对整个表进行扫描就能在其中找到所 需要的数据。需要的数据。 (1) (1) 使用索引的优点使用索引的优点 利用索引可以提高系统的性能,具有如下的优点:利用索引可以提高系统的性能,具有如下的优点: 1) 1) 创建唯一索引,可以保证表中的数据记录不重复。创建唯一索引,可以保证表中的数据记录不重复。 2) 2) 加快数据检索速度。加快数据检索速度。 3) 3) 加速表与表之间的连接,如果从多个表中检

44、索数据,数据库可以通过直加速表与表之间的连接,如果从多个表中检索数据,数据库可以通过直 接搜索各表的索引列,找到需要的数据,在实现数据的参照完整性方面接搜索各表的索引列,找到需要的数据,在实现数据的参照完整性方面 有特别的意义。有特别的意义。 4) 4) 在使用在使用ORDER BYORDER BY和和GROUP BYGROUP BY子句中进行检索数据时,可以显著减少查询子句中进行检索数据时,可以显著减少查询 中分组和排序的时间。中分组和排序的时间。 5) 5) 可以在检索数据的过程中使用优化隐藏器,从而提高系统的性能。可以在检索数据的过程中使用优化隐藏器,从而提高系统的性能。 那么,在什么情

45、况下应该考虑创建索引?是不是索引创建得越多越好那么,在什么情况下应该考虑创建索引?是不是索引创建得越多越好 呢?呢? (2) (2) 创建索引需要遵循一定的原则创建索引需要遵循一定的原则 创建索引一般遵循以下的原则:创建索引一般遵循以下的原则: 1) 1) 主键列上一定要建立索引。主键列上一定要建立索引。 2) 2) 在连接中频繁使用的列,比如外键。在连接中频繁使用的列,比如外键。 3) 3) 在频繁查询的列上最好建立索引。在频繁查询的列上最好建立索引。 4) 4) 对于对于texttext、imageimage和和bitbit数据类型的列不要建立索引。数据类型的列不要建立索引。 5) 5)

46、对于具有重复值较多的列不要建立索引。对于具有重复值较多的列不要建立索引。 (3) (3) 索引并非越多越好索引并非越多越好 索引虽然很重要,但也不是越多越好,这是因为:索引虽然很重要,但也不是越多越好,这是因为: 1) 1) 创建索引要花费时间并占用存储空间。创建聚集索引所需要的可用空创建索引要花费时间并占用存储空间。创建聚集索引所需要的可用空 间是数据库表中数据量的间是数据库表中数据量的120%120%,且不包含当前表所占空间。,且不包含当前表所占空间。 2) 2) 维护索引也要花费时间。维护索引也要花费时间。 3) 3) 当对表进行修改时,需要维护索引,插入、更新和删除的数据越多,当对表进

47、行修改时,需要维护索引,插入、更新和删除的数据越多, 维护的开销就越大。所以对于经常插入、更新、删除记录的列不要建维护的开销就越大。所以对于经常插入、更新、删除记录的列不要建 立索引。立索引。 9.6.2 9.6.2 索引类型索引类型 SQL ServerSQL Server的索引主要分为两类:聚集索引和非聚集索引。除此之的索引主要分为两类:聚集索引和非聚集索引。除此之 外,还可以分为唯一索引、包含列索引、索引视图、全文索引、空间索引、外,还可以分为唯一索引、包含列索引、索引视图、全文索引、空间索引、 筛选索引和筛选索引和XMLXML索引等。下面主要介绍聚集索引和非聚集索引,其他的类型索引等。

48、下面主要介绍聚集索引和非聚集索引,其他的类型 只作简单说明。只作简单说明。 1. 1. 聚集索引聚集索引 聚集索引也称簇索引,是指表中数据行的物理存储顺序与索引顺序完全聚集索引也称簇索引,是指表中数据行的物理存储顺序与索引顺序完全 相同。当为一个表的某列创建聚集索引时,表中的数据会按该列进行重新相同。当为一个表的某列创建聚集索引时,表中的数据会按该列进行重新 排序,然后再存储到磁盘上,即聚集索引与数据是混为一体的。排序,然后再存储到磁盘上,即聚集索引与数据是混为一体的。 每个表只能创建一个聚集索引,因为一个表中的记录只能以一种物理顺每个表只能创建一个聚集索引,因为一个表中的记录只能以一种物理顺

49、 序存放。一般建立在经常搜索的列上。在默认情况下,序存放。一般建立在经常搜索的列上。在默认情况下,SQL ServerSQL Server为主键为主键 约束自动建立聚集索引。约束自动建立聚集索引。 2. 2. 非聚集索引非聚集索引 非聚集索引也称非簇索引,非聚集索引具有与表的数据完全分离的结非聚集索引也称非簇索引,非聚集索引具有与表的数据完全分离的结 构,使用非聚集索引不用将物理数据页中的数据按列排序。非聚集索引中构,使用非聚集索引不用将物理数据页中的数据按列排序。非聚集索引中 存储了组成非聚集索引的关键字的值和行定位器。存储了组成非聚集索引的关键字的值和行定位器。 表中的每一个列上都可以有自

50、己的非聚集索引,创建的非聚集索引最表中的每一个列上都可以有自己的非聚集索引,创建的非聚集索引最 多为多为249249个。个。 从建立了聚集索引的表中取出数据要比建立了非聚集索引的表快。而从建立了聚集索引的表中取出数据要比建立了非聚集索引的表快。而 非聚集索引需要大量的磁盘空间和内存。如果要在一个表中既建立聚集索非聚集索引需要大量的磁盘空间和内存。如果要在一个表中既建立聚集索 引又建立非聚集索引,应该先建立聚集索引,然后建立非聚集索引。引又建立非聚集索引,应该先建立聚集索引,然后建立非聚集索引。 3. 3. 其他类型的索引其他类型的索引 除了以上两种类型的索引外,还有以下类型的索引:除了以上两种

51、类型的索引外,还有以下类型的索引: (1) (1) 唯一索引唯一索引 唯一索引确保索引键不包含重复的值,因此,表或视图中的每一行在唯一索引确保索引键不包含重复的值,因此,表或视图中的每一行在 某种程度上是唯一的。聚集索引和非聚集索引都可以是唯一索引。某种程度上是唯一的。聚集索引和非聚集索引都可以是唯一索引。 (2) (2) 包含列索引包含列索引 一种非聚集索引,它扩展后不仅包含键列,还包含非键列。一种非聚集索引,它扩展后不仅包含键列,还包含非键列。 (3) (3) 索引视图索引视图 视图的索引将具体化(执行)视图,并将结果集永久存储在唯一的聚视图的索引将具体化(执行)视图,并将结果集永久存储在

52、唯一的聚 集索引中,而且其存储方法与带聚集索引的表的存储方法相同。创建聚集集索引中,而且其存储方法与带聚集索引的表的存储方法相同。创建聚集 索引后,可以为视图添加非聚集索引。索引后,可以为视图添加非聚集索引。 (4) (4) 全文索引全文索引 一种特殊类型的基于标记的功能性索引,有一种特殊类型的基于标记的功能性索引,有Microsoft SQL ServerMicrosoft SQL Server全全 文引擎生成和维护。用于帮助在字符串数据中搜索复杂的词。文引擎生成和维护。用于帮助在字符串数据中搜索复杂的词。 (5) (5) 空间索引空间索引 利用空间索引,可以更高效地对利用空间索引,可以更高

53、效地对geometrygeometry数据类型的列中的空间对数据类型的列中的空间对 象(空间数据)执行某些操作。空间索引可减少需要应用开销相对较大象(空间数据)执行某些操作。空间索引可减少需要应用开销相对较大 的空间操作的对象。的空间操作的对象。 (6) (6) 筛选索引筛选索引 一种经过优化的非聚集索引,尤其适用于涵盖从定义完善的数据子一种经过优化的非聚集索引,尤其适用于涵盖从定义完善的数据子 集中选择数据的查询。筛选索引使用筛选谓词对表中的部分行进行索引。集中选择数据的查询。筛选索引使用筛选谓词对表中的部分行进行索引。 与全文索引相比,设计良好的筛选索引可以提高查询性能、减少索引维与全文索

54、引相比,设计良好的筛选索引可以提高查询性能、减少索引维 护开销并可降低索引存储开销。护开销并可降低索引存储开销。 (7) XML(7) XML xml xml数据类型中数据类型中XMLXML二进制大型对象(二进制大型对象(BLOBBLOB)的已拆分持久表示形式。)的已拆分持久表示形式。 9.7 9.7 创建索引创建索引 创建索引之前首先要清楚,只有表的所有者才能在表上创建索引,在创建索引之前首先要清楚,只有表的所有者才能在表上创建索引,在 创建唯一索引时,应该保证创建索引的列不包含重复的数据,并且没有两创建唯一索引时,应该保证创建索引的列不包含重复的数据,并且没有两 个或更多的空值。个或更多的

55、空值。 可以在建表的时候创建索引,也可以对已存在的表创建索引。创建索可以在建表的时候创建索引,也可以对已存在的表创建索引。创建索 引有两种方法:一是使用引有两种方法:一是使用SQL Server Management StudioSQL Server Management Studio工具创建索引工具创建索引 ,二是通过书写,二是通过书写Transact-SQLTransact-SQL语句创建索引。下面分别介绍两种方法。语句创建索引。下面分别介绍两种方法。 9.7.1 9.7.1 使用使用SQL Server Management StudioSQL Server Management Stu

56、dio工具创建索引工具创建索引 下面以具体的例子介绍使用下面以具体的例子介绍使用Management StudioManagement Studio创建索引的步骤。创建索引的步骤。 【例【例9-89-8】为数据库】为数据库“Library”Library”中的中的“UserTb”UserTb”表创建一个唯一的非聚集表创建一个唯一的非聚集 索引索引index_UserNameindex_UserName。 创建的步骤如下:创建的步骤如下: 1) 1) 打开打开“SQL Server Management Studio”SQL Server Management Studio”窗口,在左边的窗口,

57、在左边的“对象资源管对象资源管 理器理器”中中“数据库数据库”选项,展开选项,展开“Library”Library”数据库下的数据库下的“UserTb”UserTb”表,右表,右 键单击其下的键单击其下的“索引索引”对象,在弹出的快捷菜单中选择对象,在弹出的快捷菜单中选择“新建索引新建索引”,如,如 图图9-119-11所示。所示。 2) 2) 如图如图9-129-12所示,在打开的所示,在打开的“新建索引新建索引”窗口中,在窗口中,在“索引名称索引名称”里输入里输入 “index_UserName”index_UserName”,在,在“索引类型索引类型”下拉列表中选择下拉列表中选择“非聚集

58、非聚集”,并选,并选 中复选框中复选框“唯一唯一”。接下来要添加索引列,单击。接下来要添加索引列,单击“添加添加”按钮,在弹出的按钮,在弹出的 “从从dbo.UserTbdbo.UserTb中选择列中选择列”窗口中表列中,选中列窗口中表列中,选中列“UserName”UserName”前的复选前的复选 框。单击框。单击“确定确定”按钮,看到在按钮,看到在“索引键列索引键列”列表中已经添加了该列,可列表中已经添加了该列,可 以修改索引列的升序还是降序的排序顺序。为获得最佳功能,建议只为每以修改索引列的升序还是降序的排序顺序。为获得最佳功能,建议只为每 个索引列选择一列或两列。个索引列选择一列或两

59、列。 3) 3) 返回返回“新建索引新建索引”窗口窗口 后,再单击该窗口中的后,再单击该窗口中的“确确 定定”按钮,索引节点下便生按钮,索引节点下便生 成了一个名成了一个名 “index_UserName”index_UserName”的索引。的索引。 9.7.2 9.7.2 使用使用CREATE INDEXCREATE INDEX语句创建索引语句创建索引 使用使用CREATE INDEXCREATE INDEX语句创建索引的语法格式如下:语句创建索引的语法格式如下: CREATE UNIQUE CLUSTERED | NONCLUSTERED INDEX index_nameCREATE U

60、NIQUE CLUSTERED | NONCLUSTERED INDEX index_name ON table | view ( column ASC | DESC ,n ) ON table | view ( column ASC | DESC ,n ) WITH WITH ( PAD_INDEX= ON | OFF ( PAD_INDEX= ON | OFF | FILLFACTOR=filefactor | FILLFACTOR=filefactor | IGNORE_DUP_KEY= ON | OFF | IGNORE_DUP_KEY= ON | OFF | DROP_EXISTIN

温馨提示

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

评论

0/150

提交评论