第5章 索引.ppt

上传人:hyn****60 文档编号:70969427 上传时间:2023-01-31 格式:PPT 页数:81 大小:1.01MB
返回 下载 相关 举报
第5章 索引.ppt_第1页
第1页 / 共81页
第5章 索引.ppt_第2页
第2页 / 共81页
点击查看更多>>
资源描述

《第5章 索引.ppt》由会员分享,可在线阅读,更多相关《第5章 索引.ppt(81页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 第第5章章 索引索引 第第5章章 索引索引5.1 索引及其结构与类型索引及其结构与类型5.2 创建索引的列创建索引的列5.3 操作索引操作索引习题习题 第第5章章 索引索引5.1 索引及其结构与类型索引及其结构与类型5.1.1什么是索引SQLServer中的索引与书的目录很相似,表中的数据类似于书的内容。我们在看书的时候,总是通过书的页号来查看书的内容而不必翻遍书中的每一页。同样SQLServer索引中记录了表中的关键值,提供了指向表中行的指针,使得SQLServer应用程序能够不扫描全表就能够找到想要的数据。因此,索引被定义成一种为了加速对表中数据行的检索而创建的分散存储结构。第第5章章

2、索引索引索引是针对一个表而建立的,它是由除存放表的数据页面以外的索引页面构成。每个索引页面中的行都含有逻辑指针,以便加速检索物理数据。因此,对表中的列是否创建索引以及创建什么样的索引,对于查询的响应速度都会有很大的影响。创建了索引的列几乎是立即响应,而不创建索引的列,就需较长的等待时间。因为对未创建索引的列,SQLServer要一行一行地去查询,这种扫描所耗费的时间将随着表中数据量的增加而成正比地增加。索引既可在定义表时创建,也可以在定义了表之后随时创建。第第5章章 索引索引5.1.2索引的结构SQLServer索引的结构一般是一个B树,B树结构以一个根节点开始,这个根节点是索引的起始点,如图

3、5-1所示。根节点包含索引行(索引数据行),索引行含有索引键值的范围(AH)和指向下一个索引节点分支节点(AD,EH)的指针。分支节点依次含有索引行,它们带有指向其他分支节点的更细化的值(AB,GH)。每级分支节点被称为一个索引级别。在B树最底层的节点称为叶子节点。叶子节点含有索引键数据(A,H)加上被引用数据位置或数据自身的信息,这主要依赖于索引是非聚集的还是聚集的(这两种索引类型在下一小节介绍)。到达一个叶子节点必须经过的索引级数,决定了找到需要的数据行所必需的I/O数量。第第5章章 索引索引当然,并不一定每个节点都如图5-1所示只包含两个指针。实际上,节点中的每条索引行都含有一个指向其他

4、节点的指针。图5-2是常规索引结构示意图。图5-1索引示例 第第5章章 索引索引图5-2索引结构 第第5章章 索引索引5.1.3索引类型SQLServer索引有4种类型,即聚集索引、非聚集索引、惟一索引及全文本索引。其中,聚集索引和非聚集索引是两种主要的索引类型。对于这两种索引类型之中的任何一种索引,你都可以指定该索引是否应该是一个惟一索引(实际上它是一种特殊的聚集或非聚集索引)。而全文本索引更像一个目录,它具有与聚集索引和非聚集索引不同的特性,是代表它自己的一类索引。第第5章章 索引索引下面将分别介绍这几种索引。1聚集索引(ClusteredIndex)聚集索引是一种指明表数据物理存储顺序的

5、索引。在聚集索引中,行的物理存储顺序与索引顺序完全相同,即索引的顺序决定了表中行的存储顺序。表数据按照指定作为聚集索引的一个或多个键列排序并存储。聚集索引类似于一本字典,字典按照字母顺序存储信息,并提供引导字帮助用户快速定位信息的位置,在同一页上找到数据和它的引导字。相似的,聚集索引含有索引页和实际数据页,数据页组成聚集索引的最底层(叶子节点),如图5-3所示。第第5章章 索引索引图5-3聚集索引的结构 第第5章章 索引索引在图5-3中,根节点中的每行将分别指向分支节点,分支节点的行又将指向其他的分支节点,最后一组分支节点将最终指向叶子节点。当你到达索引的最底层(即叶子节点)时,也就已经到达实

6、际数据页了。因为数据按照一个指定的顺序物理地存储,所以你只能为每个表创建一个聚集索引。由于聚集索引的顺序与数据行存放的物理顺序相同,因此,聚集索引最适合于范围搜索。因为相邻的行将被物理地存放在相同的页面上或相邻近的页面上,所以当在用于查找一定范围值的列上创建聚集索引时,聚集索引非常有效。第第5章章 索引索引例如,在图书馆中存放着很多书,这些书可以按照作者顺序存放,也可以按照书名顺序存放,还可以按照书的出版社排序存放。假设现在这些书是杂乱存放的,并且在书名列上建立了聚集索引,那么这些书就必须按照书名的顺序重新排放,使得数据(书)按照索引排序。这就是聚集索引。创建聚集索引应该注意以下事项:每张表只

7、能有一个聚集索引。创建聚集索引时所需的可用空间应是数据库表中数据量的120%。这是因为在创建聚集索引时表中的数据将被复制以便进行排序,排序完成后,再将旧的未加索引的表删除,所以数据库必须有足够的用来复制的空间。第第5章章 索引索引主键是聚集索引的良好候选者。缺省设置是非聚集索引。2.非聚集索引(NonclusteredIndex)非聚集索引与聚集索引不同,它并不在物理上排列数据,即索引中的逻辑顺序并不等同于表中行的物理顺序。索引仅仅记录指向表中行的位置的指针,这些指针本身是有序的,通过这些指针可以在表中快速地定位数据。图5-4描述了非聚集索引的结构。在它的叶子节点中不含有实际表数据,取而代之的

8、是,索引本身完全与数据分离,就像一本在书的后面带有索引的书(索引只是指明到哪一页,而数据并不与索引本身在一起)。第第5章章 索引索引图5-4非聚集索引的结构 第第5章章 索引索引非聚集索引的叶子节点含有索引行,用于存储决定行确定位置的索引数据和信息。位置信息可以是两种类型之一,取决于表上是否存在聚集索引。如果有聚集索引,那么对于每行,聚集索引的键值存储在非聚集索引的叶子节点之中,作为该行的定位器。这个值可以被直接用来定位数据,它位于聚集索引的叶子节点之中。如果聚集索引不是一个惟一索引,SQLServer就自动地为所有相同的索引键值分配一个内部值,让它们惟一地以非聚集索引方式使用。这个内部值对于

9、用户来说是不可见的。如果表上没有聚集索引,那么每个叶子节点含有一个行ID作为行的定位器,而不是聚集索引的一个键值。行ID是一个指针,由文件ID、页数目和页中的行数目组成。这个指针能够精确地指示在哪里可以找到行,所以一旦到达行ID,只需要再进行一次I/O便可以读取数据行。第第5章章 索引索引创建非聚集索引应该注意以下事项:SQLServer允许一个表上最多可以有249个非聚集索引。为一个表建立索引默认都是非聚集索引。在一列上设置惟一性约束时也自动在该列上创建非聚集索引3惟一索引(UniqueIndex)惟一索引既可以采用聚集索引的结构,又可以采用非聚集索引的结构,被特殊地创建成惟一的。插入到键值

10、列或列组的值必须是惟一的,不允许有重复的键值。对于复合键,这意味着值的组合必须是惟一的。第第5章章 索引索引惟一索引会被经常使用,因为在一个表中,可能会有很多列需要值的惟一性(如:在人员表中,有身份证号、驾驶证号、E-mail地址、电话号等)。这样,你可以在这些列上创建惟一索引。当你希望惟一索引只在一个列上,即当希望一个单独的列自身是惟一的时,就可以在该列上创建一个惟一索引。例如,一个含有身份证号码的列,就可以在该列上创建一个惟一索引,以确保在表中没有相同的身份证号码。第第5章章 索引索引另外,还可以通过创建UNIQUE约束的方法强制特定列的数据的惟一性。当创建UNIQUE约束时,SQLSer

11、ver自动地创建一个惟一非聚集索引以强制该约束。一旦你在一个表上拥有惟一索引,SQLServer会阻止向表中输入相同的数据,并将给出一条错误消息,指出试图插入相同的行。所以,创建惟一性索引时,应注意如下事项:创建惟一性索引时,应保证创建索引的列不包括重复的数据,并且没有两个或两个以上的空值。因为创建索引时将两个空值也视为重复的数据,所以如果有这种数据,则必须先将其删除,否则索引不能成功创建。第第5章章 索引索引4.全文本索引(Full-textIndex)与前面所述的索引相比,全文本索引相对要复杂一些。全文本索引实际上就像一个目录,它不是简单地在有序B树中进行查找,而是允许你使用关键字组进行查

12、找。全文本索引是微软查找服务的一部分,它被广泛地应用在Web站点搜索引擎和其他基于文本的操作中。与B树索引不同,这种索引存储在数据库的外部,但仍由数据库来维护。通过这种方式,索引可以保持它自己的结构。需要说明的是,如果使用全文本索引,你必须安装SQLServer标准版或企业版提供的全文本搜索服务。要选择这个选项,就必须在安装时选择自定义安装。第第5章章 索引索引全文本索引拥有普通B树索引所没有的一个有价值的特性,因为这种索引被设计为是一个文本搜索引擎,所以它支持普通文本搜索能力以外的功能。使用全文本索引,你可以执行搜索词或短语的操作、搜索单个词或成组词的操作以及搜索彼此相似的词的操作。创建和维

13、护全文本索引需要注意如下事项:只可以在char(字符)或varchar(变长字符)类型的列上创建全文本索引。每个表只允许有一个全文本索引。全文本索引不能够自动地更新,这点不同于B树索引。使用存储过程或全文本索引向导来创建、管理和删除全文本索引。第第5章章 索引索引5.2 创建索引的列创建索引的列5.2.1创建索引的理由对表中的列是否创建索引,以及创建何种索引,对于查询的响应速度会有很大差别。创建了索引的列几乎是立即响应,而不创建索引的列则需要较长时间的等待。因为列上未创建索引,在用该列为条件查询时,SQLServer就要一行一行地去查看整个表,这种扫描所耗费的时间直接同表中的数据量成正比。所以

14、,创建索引的一个最大优点就是能够加速数据检索。比如,要在表“图书信息”中查询名称为“SQLServer2000数据库实训教程”信息,需要执行以下T-SQL语句:第第5章章 索引索引SELECT学生图书借阅管理系统FROM图书信息WHERE图书名称=SQLServer2000数据库实训教程如果“图书名称”列上没有索引,那么SQLServer就会按照表中行的存储顺序一行一行地查询,查看每一行“图书名称”列是否符合查询条件,这样为了找出满足查询条件的记录必须访问表中的每一行。对于一个具有成千上万行的大型表来说,这种全表搜索可能要花费数小时的时间。第第5章章 索引索引如果在“图书名称”列上创建了索引,

15、那么SQLServer就可以首先搜索这个索引,在索引中找到符合查询条件的值(SQLServer2000数据库实训教程),然后按照索引中记录的相应行在表中的位置找到表中的行。由于索引进行了分类,而且索引包括的行和列比全表少得多,因此索引搜索是很快的。另外,创建索引还能加速连接、ORDER BY和GROUPBY语句的执行。我们知道,连接、ORDERBY和GROUPBY都需要数据检索,在建立索引后,其数据检索速度就会加快,从而也就加速了连接等操作。除此之外,通过创建惟一索引,还可以保证表中的数据不重复,强制实施行的惟一性。第第5章章 索引索引5.2.2不在每一列上建索引的理由既然在上节中阐述了索引的

16、重要性,那么为什么不在每个列上都创建索引呢?其实,定义一个表的索引的效果在很大程度上取决于对表访问的形式。如果索引和用户访问数据的形式相匹配,则它是最有效的。由于索引的创建通常有助于改进大型的或频繁更新的数据库的性能,因而每个索引必须保持是最新的。因此对一个表所进行的每个插入、更新和删除操作,如果所涉及的列也包含在索引定义中,都需要对索引进行更新。第第5章章 索引索引当我们在创建聚集索引时,索引所需要的可用空间应该是数据库表中数据量的120%,该空间不包括现存表已经占用的空间。在建立索引时,数据被复制以便建立聚集索引,索引建立后,再将旧的未加索引的表数据删除,而且创建索引也需要时间。所以,创建

17、索引要花费时间和占用存储空间。此外,建立索引加快了检索速度,却减慢了数据修改速度。因为每当执行一次数据修改(包括插入、删除和更新),就要维护索引,修改的数据越多,涉及维护索引的开销也就越大。所以修改数据时要动态维护其索引,对建立了索引的列执行修改操作要比未建立索引的列执行修改操作所花的时间长。第第5章章 索引索引也就是说,索引虽然可以加快数据查询的速度,但是会减慢数据插入的速度。并且,如果将一些数据行插入到一个已经放满行的数据页面上,就必须将这个数据页面中最后一些数据移到下一个页面中去。这样,你必须改变索引页中的内容,以保持数据顺序的正确性,这就是对索引的维护。它必须花费代价,而且减慢了数据插

18、入的速度。因此,虽说创建索引有很多优点,但也并不是在每一列上都要创建索引。此外,一个索引的最大字节为900字节,在char等类型的大列上创建索引时应考虑这一限制,在多列上创建索引时也要注意字节总和不要超过这个数。一个索引中最多包含的列数为16。第第5章章 索引索引5.2.3考虑创建索引的列从上所述可以看出,有了索引的缺点是:索引占用磁盘空间,并且在每次给表添加一行时,都必须修改这个索引;每次修改现有行中的一个已经被索引的列时,也必须修改这个索引。这样就会使表的INSERT和UPDATE语句承担额外的开销,因此,没有必要对表中的所有列都建立索引。是否创建索引,在哪些列上创建索引,要看创建索引和维

19、护索引的代价与因创建索引所节省的时间相比较来定。那么,哪些列应该考虑创建索引,哪些列不考虑创建索引呢?一般来说,如下情况的列考虑创建索引:第第5章章 索引索引主键。一般而言,存取表的最常用的方法是通过主键来进行。因此,我们应该在主键上建立索引。连接中频繁使用的列(外键)。这是因为用于连接的列若按顺序存放,系统可以很快执行连接。在某一范围内频繁搜索的列和按排序顺序频繁检索的列。而如下情况的列不考虑建立索引:很少或从来不在查询中引用的列。因为系统很少或从来不根据这个列的值去查找行,所以不考虑建立索引。第第5章章 索引索引只有两个或若干个值的列(如性别:男/女),也得不到建立索引的好处。小表(行数很

20、少的表)一般也没有必要创建索引。总之,当UPDATE的性能比SELECT的性能更重要时不应创建索引。另外,索引可根据需要进行创建或删除以提高性能,适应不同操作要求。例如,要对表进行大批量的插入和更新时,应先删除索引,待执行大批量插入或更新完成后,再重建立索引。因为在插入或更新时需要花费代价来进行索引的维护。第第5章章 索引索引5.3 操作索引操作索引5.3.1创建索引像在数据库中创建其他大多数对象一样,在表中创建索引可用如下两种方法:第一种方法是使用企业管理器来创建索引;第二种方法就是用查询分析器运行CREATEINDEX命令来创建索引。为了讲述方便,我们仍以“学生图书借阅管理”数据库为例来介

21、绍如何创建索引。第第5章章 索引索引1使用企业管理器的“工具”菜单中的“创建索引向导”创建索引使用企业管理器的“工具”菜单中的“创建索引向导”创建索引的步骤如下:(1)打开“企业管理器”,连接到包含“学生图书借阅管理”数据库的服务器上,这个数据库里要有你要创建索引的表。(2)点击服务器名称旁边的加号“+”,再双击“数据库”文件夹旁边的加号“+”,这样就打开了该服务器里所有数据库的列表,如图5-5所示。第第5章章 索引索引图5-5服务器里所有数据库的列表 第第5章章 索引索引(3)点击数据库“学生图书借阅管理”旁边的“+”号,再双击数据库中的“表”,这样就打开了数据库中的所有表,如图5-6所示。

22、选择你想要创建索引的表,如我们选择表“图书信息”。图5-6数据库中所有表的列表 第第5章章 索引索引(4)从“工具”菜单中选取“向导”项,这样就打开了“选择向导”对话框,如图5-7所示。点击“数据库”选项旁边的加号“+”,选择“创建索引向导”。图5-7“选择向导”对话框 第第5章章 索引索引(5)单击“确定”按钮,打开一个介绍屏幕,如图5-8所示。图5-8创建索引向导的介绍屏幕 第第5章章 索引索引(6)选择“下一步”按钮,出现创建向导的第二步“选择数据库和表”,如图5-9所示。此时允许你选择“数据库名称”和“对象名”。如果你在(2)步中没有选择数据库,现在仍然可以选择。图5-9选择数据库和表

23、 第第5章章 索引索引(7)单击“下一步”按钮,出现创建向导的第三步“当前的索引信息”,如图5-10所示。如果表中有任何已经创建的索引,那么都会反映在此对话框里。图5-10当前的索引信息 第第5章章 索引索引(8)选择“下一步”按钮,出现创建向导的第四步“选择列”,如图5-11所示。从这个对话框中,你可以选择任何可用作索引的列。这里我们选中“图书名称”列。图5-11选择列窗口 第第5章章 索引索引(9)单击“下一步”按钮,出现创建向导的第五步“指定索引选项”,如图5-12所示。在该对话框中,可以让你为该索引指定选项。如果表中还没有聚集索引,你可以指定该索引为聚集索引。如果表中已有聚集索引,则这

24、一项是变灰的,并给出信息提示。如果需要,你还可把它指定为惟一索引。选项下面的部分用来为索引指定“填充因子”。第第5章章 索引索引图5-12指定索引选项 第第5章章 索引索引“填充因子”是SQLServer将要填充索引页的百分比。你的最佳选择是让SQLServer填充索引页到“最佳”。(10)单击“下一步”按钮,出现创建向导的第六步“正在完成创建索引向导”,如图5-13所示。此对话框概括了加入到索引中的列,并允许你为该索引取一个名称,如“图书信息_Index_1”。(11)点击“完成”按钮,SQLServer会开始为你创建索引。完成之后,SQLServer会弹出一个信息框告诉你索引已经创建成功,

25、单击“确定”按钮完成索引的创建。第第5章章 索引索引图5-13设置名称 第第5章章 索引索引2使用企业管理器在一个已存在的表上创建索引使用企业管理器在一个已存在的表上创建索引,步骤如下:(1)在企业管理器树形目录中展开要使用的服务器组、服务器。(2)展开“数据库”节点,并展开相应的数据库,如展开数据库“学生图书借阅管理”。(3)用鼠标左键单击“表”,右边窗口中将显示出数据库中的所有表的列表。第第5章章 索引索引(4)在这些表的列表中,用鼠标右键单击想要创建索引的表(如表“学生信息”),将弹出一个快捷菜单。再用鼠标指向其中的“所有任务”选项,又将自动弹出一个快捷菜单,如图5-14所示。图5-14

26、为表“学生信息”创建索引 第第5章章 索引索引(5)用鼠标指向“管理索引”并单击,打开“管理索引WX”对话框,如图5-15所示。该对话框的“现有索引”列表中会显示已存在的索引。(6)单击图5-15对话框中的“新建”按钮,打开如图5-16所示的“新建索引WX”对话框。图5-15管理索引对话框 第第5章章 索引索引图5-16新建索引对话框 第第5章章 索引索引(7)在“索引名称”文本框中输入索引的名称,如“学生信息_Index_1”。(8)在“列”的窗口里选择要创建索引的列,用户可以选择多列。(9)设置索引类型:通过选中“唯一值”复选框来创建一个惟一性索引。通过选中“聚集索引”复选框来创建一个聚集

27、索引。在图5-16所示的对话框中,“聚集索引”复选框是变灰的,因为“学生信息”表中已经在“借书证号”列上创建了一个“PK_学生信息”的聚集索引(可通过5.3.2节介绍的方法来查看)。因为一个表只能包含一个聚集索引,所以不能再创建聚集索引了。第第5章章 索引索引图5-17显示了实例中为“学生信息”表的“姓名”、“性别”、“班级”列组合创建一个惟一性的非聚集索引。图5-17创建非聚集索引 第第5章章 索引索引(10)单击“编辑SQL”按钮,可以查看创建此索引所使用的T-SQL语句,如图5-18所示。图5-18创建索引使用的T-SQL语句 第第5章章 索引索引(11)在图5-17所示的对话框中单击“

28、确定”按钮,回到管理索引对话框,该对话框中出现了刚才新建的索引“学生信息_Index_1”,如图5-19所示。图5-19增加的一个索引 第第5章章 索引索引3在建表时创建索引用企业管理器在建表(可参见3.2节所介绍内容)时创建索引,步骤如下:(1)在企业管理器树形目录中展开要使用的服务器组、服务器。(2)展开“数据库”节点,并展开想要创建表的数据库。(3)用鼠标右键单击“表”,选择“新建表”命令,打开如图5-20所示的对话框。(用第3章介绍的方法,在新表各列中输入各列的定义。)在此我们随便输入几个列名。第第5章章 索引索引图5-20新建表对话框 第第5章章 索引索引(4)在表中的任意一行上单击

29、鼠标右键,弹出的快捷菜单如图5-21所示。图5-21快捷菜单 第第5章章 索引索引(5)在弹出的快捷菜单中选择“索引/键”命令,将弹出“属性”对话框,如图5-22所示。图5-22“属性”对话框 第第5章章 索引索引(6)在“属性”对话框的“索引/键”选项卡中单击“新建”按钮,弹出如图5-23所示的对话框。此时可输入索引名,创建索引。(7)在“索引名”文本框中为索引命名。(8)在“列名”列表中选择要创建索引的列,这里可以选择多列。(9)选择索引类型:通过选中“创建UNIQUE”复选框来创建一个惟一性索引。通过选中“创建为CLUSTERED”复选框来创建一个聚集索引。第第5章章 索引索引图5-23

30、“属性”对话框 第第5章章 索引索引图5-24保存表及索引提示框 第第5章章 索引索引4使用查询分析器来创建索引用查询分析器运行CREATEINDEX命令也可在表中创建索引。该命令的语法如下:CREATEUNIQUECLUSTERED|NONCLUSTEREDINDEXindex_nameONtable|view(columnASC|DESC,.n)WITH,.nONfilegroup:=PAD_INDEX|第第5章章 索引索引FILLFACTOR=fillfactor|IGNORE_DUP_KEY|DROP_EXISTING|STATISTICS_NORECOMPUTE|SORT_IN_TE

31、MPDB其中,各选项描述如表5-1所述。第第5章章 索引索引表5-1CREATEINDEX命令中各选项的描述 第第5章章 索引索引 第第5章章 索引索引 第第5章章 索引索引 第第5章章 索引索引【例5.1】在“学生图书借阅管理”的“图书信息”表中创建一个惟一性的非聚集索引“IX_作者”,具体创建步骤如下:(1)启动“查询分析器”;(2)输入下列SQL语句:USE学生图书借阅管理CREATEUNIQUENONCLUSTEREDINDEXIX_作者ON图书信息(作者)第第5章章 索引索引(3)执行这个语句,在查询窗口中将显示“命令已成功完成”,如图5-25所示。它表明索引“IX_作者”已被创建。

32、以上SQL语句代码中,UNIQUE关键字代表创建惟一性索引,NONCLUSTERED关键字代表创建非聚集索引(该关键字可以省略,因为SQLServer默认创建非聚集索引),“IX_作者”是用户自定义的索引名。第第5章章 索引索引图5-25查询窗口 第第5章章 索引索引【例5.2】在“学生图书借阅管理”的“学生信息”表中创建一个惟一性的聚集索引“IX_姓名”,具体创建步骤如下:(1)启动“查询分析器”;(2)输入下列SQL语句:USE学生图书借阅管理CREATEUNIQUECLUSTEREDINDEXIX_姓名ON学生信息(姓名)(3)执行这个语句,在查询窗口中将显示“命令已成功完成”。它表明索

33、引“IX_姓名”已被创建。第第5章章 索引索引以上SQL语句代码中,UNIQUE关键字代表创建惟一性索引,CLUSTERED关键字代表创建聚集索引(该关键字不可以省略,因为SQLServer默认创建的是非聚集索引),“IX_姓名”是用户自定义的索引名。用户不能在一个表上创建多个聚集索引。如果创建过聚集索引,将给出不能创建的显示消息。如本例中事先创建过一个名为PK_学生信息表的聚集索引,执行时将显示如下消息:“不能在表学生信息上创建多个聚集索引。请在创建新聚集索引前除去现有的聚集索引PK_学生信息表”,如图5-26所示。第第5章章 索引索引图5-26消息显示 第第5章章 索引索引【例5.3】在“

34、学生图书借阅管理”的“租借信息”表中创建一个非惟一性的非聚集索引“IX_借书证号”,具体创建步骤如下:(1)启动“查询分析器”;(2)输入下列SQL语句:USE学生图书借阅管理CREATENONCLUSTEREDINDEXIX_借书证号ON租借信息(借书证号)WITHDROP_EXISTING 第第5章章 索引索引(3)执行这个语句,在查询窗口中将显示“命令已成功完成”,如图5-27所示。它表明索引“IX_借书证号”已被创建。图5-27输入创建语句 第第5章章 索引索引以上SQL语句代码中,WITH子句中可以包含各种索引的创建选项。DROP_EXISTING指如果表中已存在同名的索引,则将其删

35、除并重建索引;如果没有,则显示未能找到消息。如本例中如没有同名索引,则显示消息:“未能找到任何名为IX_借书证号的索引(属于表租借信息)”值得注意的是,聚集索引改变表的物理顺序。所以应先建聚集索引,后建非聚集索引,而且不能在视图上创建索引,也不能在BIT、TEXT和IMAGE数据类型定义的列上创建索引。第第5章章 索引索引5.3.2查看索引1使用企业管理器查看在企业管理器中,可以使用与创建索引同样的方法打开“管理索引”对话框,即可看到表上所有的索引。选中其中一个索引,单击“编辑”按钮,即可查看索引。另外,还可以修改这一索引的定义。2使用查询分析器查看打开“SQL查询分析器”“工具”“索引管理”

36、对话框,选中所要查看的数据库及表,即可看到表上所有的索引。选中其中一个索引,并单击“编辑”按钮,也可查看索引及修改这一索引的定义。第第5章章 索引索引3使用系统存储过程查看使用系统存储过程sp_helpindex也可以查看特定表上的索引信息。比如,在查询分析器中执行语句:USE学生图书借阅管理EXECsp_helpindex租借信息结果给出了“租借信息”表上所有索引的名称、类型和创建索引的列,如图5-28所示。第第5章章 索引索引图5-28“租借信息”表的索引信息 第第5章章 索引索引5.3.3删除索引在企业管理器中,可以使用与查看索引同样的方法打开“管理索引”对话框,即可看到表上所有的索引。

37、选中其中一个索引,单击“删除”按钮,就可以删除这一索引的定义。同样,在查询分析器中执行下列语句,也可达到删除索引的目的。DROPINDEXtable.index,.n 第第5章章 索引索引例如,删除“图书信息”表上的“学生信息_index_1”索引,可执行如下语句:USE学生图书借阅管理DROPINDEX学生信息.学生信息_index_1执行这个语句,则在查询窗口中将显示“命令已成功完成”,如图5-29所示。“图书信息”表上的“学生信息_index_1”索引将被删除,用户可用前面介绍的方法查看结果。第第5章章 索引索引图5-29删除索引 第第5章章 索引索引删除索引时要注意,如果索引是在CRE

38、ATETABLE中创建,只能用ALTERTABLE进行删除。如果用CREATEINDEX创建,可用DROPINDEX删除。以上在讲述索引的操作过程中,我们是以“学生图书借阅管理”数据库为例进行的,读者在理解了这些操作之后,可在自己新建的数据库中,在自己定义的表上进行。第第5章章 索引索引习题习题1 SQLServer索 引 中 记 录 了 表 中 的_,提供了_的指针,使得SQLServer应用程序能够不扫描全表而能够找到想要的数据。因此,索引被定义成一种为了加速对表中_而创建的分散存储结构。2索引既可以在_时创建,也可以在_时创建。3SQLServer索引的结构一般是一个_,其结构以一个根节

39、点开始,这个根节点是索引的_。第第5章章 索引索引4索引的类型可划分为_、_、_和_四种类型。5每个表上最多可以创建_个聚集索引,_个非聚集索引。为一个表建立索引默认为_,一个索引最大为_字节,在char等类型的大列上创建索引应考虑这一限制,一个索引中最多包含的列数为_。6创建惟一性索引时,应保证_不包括重复的数据,并且没有两个或两个以上的空值。如果有这种数据,必须先将其_,否则索引不能成功创建。第第5章章 索引索引7什么样的列适合创建索引?索引是否越多越好?为什么?8聚集索引和非聚集索引有什么区别?在一个表中可以建立多个聚集索引吗?为什么?9举例说明聚集索引使用的场合。10创建、修改、删除索引分别使用什么T-SQL语句?

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁