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

下载本文档

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

文档简介

1、第第7章章 索引和视图索引和视图本章学习目标本章学习目标l掌握索引的创建、管理、维护和删除等操作 l掌握视图的创建、修改、使用和删除等操作 l学会使用视图查询、修改、更新和删除数据 7.1 索引索引1、索引基础知识、索引基础知识 索引的概念和作用索引的概念和作用 索引是对数据库表中一个或多个列(例如Student表的“学号”列)的值进行排序的结构。 索引提供指针以指向存储在表中指定列的数据值,然后根据指定的排序次序排列这些指针。 索引的分类索引的分类 SQL Server 中的索引分为3类,分别是:聚集索引非聚集索引唯一索引 聚集索引聚集索引 聚集索引会对表和视图进行物理排序,所以这种索引对查

2、询非常有效,在表和视图中只能有一个聚集索引。当建立主键约束时,如果表中没有聚集索引,SQL Server 会用主键列作为聚集索引键。也可以手动在表的任何列或列的组合上建立索引,但在实际应用中,一般为定义成主键约束的列建立聚集索引。返回返回非聚集索引非聚集索引 非聚集索引不会对表和视图进行物理排序。如果表或视图中不存储聚集索引,则表或视图是未排序的。在表和视图中最多可以建立250个非聚集索引,或者249个非聚集索引和一个聚集索引。 返回返回唯一索引唯一索引 唯一索引确保索引键不包含重复的值,因此,表或视图中的每一行在某种程度上是唯一的。例如,如果在表中的“姓名”字段上创建了唯一索引,则以后输入的

3、姓名将不能同名。返回返回2、建立索引、建立索引 创建表或视图的索引的方法有两种:使用对象资源管理器和T-SQL语句。使用“对象资源管理器”创建索引 具体的方法请参考本书第7章使用使用“对象资源管理器对象资源管理器”创建索创建索引引使用使用“对象资源管理器对象资源管理器”创建索创建索引引使用使用“对象资源管理器对象资源管理器”创建索创建索引引使用T-SQL语句创建索引 T-SQL语句创建索引的基本语法如下:CREATE UNIQUECLUSTERED|NONCLUSTEREDINDEX index_name ON (columnASC|DESC,.n) INCLUDE(column_name,.

4、n)WITH(,.n)属性和参数说明:UNIQUE:建立唯一索引。CLUSTERED:建立聚集索引。NONCLUSTERED:建立非聚集索引。index_name:索引名称,索引名称在表或视图中必须唯一,但在数据库中不必唯一。object:表名或视图名。column:索引所基于的一列或多列。ASC|DESC:确定特定索引列的升序或降序排序方向。默认值为ASC(升序)。INCLUDE(column_name,.n):指定要添加到非聚集索引的叶级别的非键列。非聚集索引可以唯一,也可以不唯一。relational_index_option:索引属性。如DROP INDEX ix_Student表示先

5、删除已经存在的索引,因为索引名称不能重复,否则会出错。【例7.1】使用T-SQL语句在CJGL数据库中的Student表上创建名为IX_Student的唯一、聚集索引,该索引基于表中的“学号”列。T-SQL脚本语句如下:USE CJGLGOCREATE UNIQUE CLUSTEREDINDEX IX_StudentON Student(StuNo)GO 注意:注意:UNIQUE和CLUSTERED之间不能用“,”号“学号”列中不能有重复值关键字的大小写不影响结果只有表的所有者才能执行CREATE INDEX语句更多请参考本书第页3、管理索引、管理索引 管理索引的操作包括:显示索引信息重命名索

6、引删除索引其他显示索引显示索引 在索引创建完成后,可以查看索引的相关信息,包括查看索引的名称、类型、索引键列等。查看索引信息有两种方法:一种是用“对象资源管理器”进行显示;另一种是用T-SQL的相关语句进行显示。 使用“对象资源管理器”显示索引 在“对象资源管理器”中找到相应的表,展开“索引”前面的“+”号后,会列出已经存在的索引列表,可以用鼠标右键单击其中一个索引名称,在打开的快捷菜单中选择“属性”,即可弹出相应的“索引”属性窗口,进行查看相关索引的信息。 如下页图所示:使用T-SQL语句显示索引 使用T-SQL语句显示相关索引信息,实际是调用了系统自定义的存储过程sp_helpindex(

7、存储过程的相关知识请参看本书第9章的内容)。【例7.2】使用T-SQL语句显示CJGL数据库中Student表的索引信息。 在查询窗口中使用的T-SQL语句如下:USE CJGLGOEXEC sp_helpindex StudentGO 执行结果如图所示返回返回重命名索引重命名索引 重命名索引和显示索引信息一样,同样有两种方法:利用“对象资源管理器”和T-SQL命令。 使用“对象资源管理器”重命名索引 此种方法重命名索引比较简单,和重命名表名的操作一样。使用T-SQL语句重命名索引利用T-SQL命令重命名索引,同样也是调用了系统自定义的存储过程sp_rename。其基本语法如下:EXEC sp

8、_rename table.old_index,new_index参数说明:table.old_index:当前的索引名称。new_index:新的索引名称。【例7.3】用sp_rename存储过程重命名CJGL数据库中的Student表下的IX_Student索引为IX_new_Student。在查询窗口中输出以下T-SQL命令:USE CJGLGOEXEC sp_renamesp_renamestudent.IX_Studentstudent.IX_Student, ,IX_new_StudentIX_new_StudentGO返回返回删除索引删除索引删除索引同样有两种方法:利用“对象资源

9、管理器”和T-SQL命令。使用“对象资源管理器”重命名索引右键单击要删除的索引,在弹出的快捷菜单中执行“删除”命令,此时会弹出 “删除对象”窗口,单击窗口中的“确定”按钮即可删除此索引。 使用T-SQL语句删除索引 使用T-SQL命令的DROP INDEX语句删除索引的基本语法如下:DROP INDEX table_or_view_name.index_name,DROP INDEX table_or_view_name.index_name,nn属性和参数说明:table_or_view_name:表或视图名index_name:索引名n:删除多个索引【例7.5】删除CJGL数据库下的Stu

10、dent表中的名为IX_new_Student的索引。 在查询窗口中输入如下T-SQL语句: USE CJGL GO DROP INDEX Student.IX_new_Student Go返回返回3、索引分析和维护、索引分析和维护索引分析索引分析 SQL Server 提供了分析索引和查询性能的方法,这里只介绍常用的两种命令:SHOWPLAN_ALLSTATISTICS IOSHOWPLAN_ALLSHOWPLAN_ALL命令命令 SQL Server将显示在执行查询的过程中连接表时所采取的每个步骤,以及是否选择和选择了哪个索引,从而达到帮助用户分析有哪些索引被系统采用的目的。 SHOWPL

11、AN_ALL的基本语法如下:SET SHOWPLAN_ALLON|OFF【例7.6】在CJGL数据库中的Student表中查询姓为“王”的所有学生信息,并且分析哪些索引被采用。 在本例中,假设已经创建了三个索引,一个是基于“学号”PRIMARY KEY约束的索引“PK_Student”,一个是基于“性别”的名为“IX_SSex_Student”的索引,一个是基于“姓名”的名为“IX_SName_Student”的索引。 在查询窗口中输入如下命令,并查看结果。 USE CJGL GO SET SHOWPLAN_ALL ON GO SELECT * FROM Student WHERE 姓名 LI

12、KE 王% GO SET SHOWPLAN_ALL OFF GO执行结果和索引的使用情况如下图所示执行结果分析: 在执行语句SHOWPLAN_ALL后,能发现在建立的三个索引中,只有基于“学号”PRIMARY KEY约束的索引“PK_Student”被调用(图中红框),而其余两个并未出现,则说明其余的两个索引在这里是毫无用处的。索引维护索引维护 判断索引是否需要维护的标准是索引碎片的大小。数据库上进行很多次的插入、更新和删除操作,久而久之就会使数据变得杂乱无序,造成索引碎片,从而造成性能的下降。 可以通过DBCC SHOWCONTIG命令来扫描表,同其返回值来确定该索引页的碎片是否严重。 DB

13、CC SHOWCONTIG语句的基本语法是:DBCC SHOWCONTIG ( table_name|table_id |view_name|view_id ,index_name|index_id )【例7.8】利用DBCC SHOWCONTIG命令返回CJGL数据库中Student表的IX_new_Student索引的碎片信息。在查询窗口中输入如下命令:use CJGLgoDBCC SHOWCONTIG(Student,IX_new_Student)go返回的信息如下图所示利用DBCC SHOWCONTIG命令扫描Student表 当碎片较多时就需要整理,碎片整理的命令为:DBCC IND

14、EXDEFRAG。 DBCC INDEXDEFRAG命令的基本语法格式为:DBCC INDEXDEFRAG (database_name,table_name|view_name,index_name) 参考本书的【例7.9】7.2 视图视图1、视图基础知识、视图基础知识视图的概念和作用 视图是从一个或多个实际表中获得的,这些表的数据存放在数据库中。那些用于产生视图的表叫做该视图的基表。一个视图也可以从另一个视图中产生。 视图中存放的是基表中用户感兴趣的数据。 视图具有以下优点:简单性安全性逻辑数据独立性 视图也有一些缺点:性能方面修改受限制2、创建视图、创建视图使用“对象资源管理器”创建视图

15、 使用“对象资源管理器”创建视图的方法较为复杂,步骤较为繁琐,具体操作请读者参考本书第7章相关示例。使用使用“对象资源管理器对象资源管理器”创建视创建视图图使用使用“对象资源管理器对象资源管理器”创建视创建视图图使用使用“对象资源管理器对象资源管理器”创建视创建视图图使用使用“对象资源管理器对象资源管理器”创建视创建视图图使用T-SQL语句创建视图T-SQL语句创建视图的基本语法如下:CREATE VIEW view_name (column,.n) WITH,.n AS select_statement ;属性和参数说明: view_name: column: WITH : AS: sele

16、ct_statement:视图的名称。视图名称必须符合有关标识符的规则 视图中的列使用的名称 对视图进行属性设置,比如:WITH ENCRYPTION对视图进行加密,防止在SQL Server复制过程中发布视图指定视图要执行的操作 定义视图的SELECT语句 【例7.11】用T-SQL语句在Student表上创建名为v_Student的视图,该视图只具有查看所有姓“王”学生信息的功能。(1)创建视图在“新建查询”窗口中输入以下SQL语句:use CJGLgocreate view v_Studentasselect * from Student where 姓名 like 王%go(2)查看该

17、视图的内容在“新建查询”窗口中输入以下SQL语句。use CJGLgoselect * from v_Studentgo结果如图所示 接下来看一个较为复杂的例子(基表是多张表)【例7.12】创建一个名为“v_C语言成绩”的视图,要求该视图能显示所有“C语言程序设计”的成绩为合格的学生的学号、姓名和分数。题目分析:根据本例的要求可知,所要查询的列有学号、姓名和分数,但是由于Score表中并没有相对应的列,所以这里的操作应该在表Score、Course和Student上进行。在“查询”窗口中输入以下代码:use CJGLgocreate view v_C语言成绩asselect distinct

18、Student.StuNo,Student.StuName,Score.Gradefrom Student,Score,Coursewhere Score.Grade=60 and Student.StuNo=Score.StuNo and Score.CouNo= ( select Course.CouNofrom Coursewhere CouName=C语言程序设计 )go 使用Group by子句、命名新列【例7.13】创建一个名为“v_专业学生数”的视图,要求该视图能显示各专业的学生总数。在“查询”窗口中输入以下代码:use CJGLgocreate view v_专业学生数as s

19、elect 专业班级,count(*) 各专业学生数 from Studentgroup by 专业班级go3、管理视图、管理视图 对视图进行管理,主要有:重命名视图修改视图通过视图修改数据删除视图查看视图定义信息重命名视图重命名视图使用“对象资源管理器”重命名视图 操作比较简单,如下图所示:重命名视图 使用T-SQL语句重命名视图 使用T-SQL命令进行视图的重命名实际上是使用了系统存储过程sp_rename,其语法格式为: sp_rename old_name,new_name参数说明: old_name:原视图名称。 new_name:新视图名称。【例7.14】用T-SQL语句将例7.1

20、3中创建的视图“v_专业学生数”改名为“v_学生数”。在“查询”窗口中输入以下代码:use CJGLgosp_rename v_专业学生数,v_学生数go修改视图修改视图使用“对象资源管理器”修改视图使用“对象资源管理器”创建视图的方法较为复杂,步骤较为繁琐,具体操作请读者参考本书第7章的【例7.16】。使用T-SQL语句修改视图 修改视图的T-SQL命令为ALTER VIEW语句,其基本语法为:ALTER VIEW view_name (column,.n) WITH,.n AS select_statement;WITH CHECK OPTION属性和参数说明:view_name:要修改的

21、视图名称column:列名view_ attribute:视图的属性select_statement:定义视图的select语句WITH CHECK OPTION:要求对该视图执行的所有数据修改语句都必须符合select_statement中所设置的条件【例7.16】将【例7.11】创建的视图v_Student中的筛选条件改为“所有姓王的女生”。 分析:【例7.11】中创建视图的条件为“姓王的学生”,而本例是将其条件增加一项“女生”。在“查询”窗口中输入以下T-SQL命令:use CJGLgoalter view v_Studentasselect * from Studentwhere 姓名

22、like 王% and 性别=女go通过视图修改数据通过视图修改数据 在使用视图修改数据时,要注意以下一些事项:Q不能在一个语句中对多个基本表使用数据修改语句。如果要修改由两个或两个以上基本表得到的视图,必须实行多次修改,每次修改只能影响一个基表。Q对于基表中需要更新而又不允许空值的所有列,它们的值在INSERT语句或DEFAULT定义中指定。这将确保基表中所有需要值的列都可以获取值。Q不能修改经过计算得到结果的列。Q在视图定义中使用了“WITH CHECK OPTION”子句,则所有在视图上执行的数据修改语句都必须符合定义视图的SELECT语句中所设定的条件。Q在基表的列中修改的数据必须符合对这些列的约束条件,如:是否为

温馨提示

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

评论

0/150

提交评论