SQL Server 2000应用基础与实训教程(李国彬) 第5章 索引.pptVIP

  • 2
  • 0
  • 约1.25万字
  • 约 82页
  • 2015-12-13 发布于广东
  • 举报

SQL Server 2000应用基础与实训教程(李国彬) 第5章 索引.ppt

第5章 索引 5.1 索引及其结构与类型 5.2 创建索引的列 5.3 操作索引 习题 5.1 索引及其结构与类型 5.1.1 什么是索引 SQL Server中的索引与书的目录很相似,表中的数据类似于书的内容。我们在看书的时候,总是通过书的页号来查看书的内容而不必翻遍书中的每一页。同样SQL Server索引中记录了表中的关键值,提供了指向表中行的指针,使得SQL Server应用程序能够不扫描全表就能够找到想要的数据。因此,索引被定义成一种为了加速对表中数据行的检索而创建的分散存储结构。 索引是针对一个表而建立的,它是由除存放表的数据页面以外的索引页面构成。每个索引页面中的行都含有逻辑指针,以便加速检索物理数据。因此,对表中的列是否创建索引以及创建什么样的索引,对于查询的响应速度都会有很大的影响。创建了索引的列几乎是立即响应,而不创建索引的列,就需较长的等待时间。因为对未创建索引的列,SQL Server 要一行一行地去查询,这种扫描所耗费的时间将随着表中数据量的增加而成正比地增加。 索引既可在定义表时创建,也可以在定义了表之后随时创建。 5.1.2 索引的结构 SQL Server索引的结构一般是一个B树,B树结构以一个根节点开始,这个根节点是索引的起始点,如图5-1所示。根节点包含索引行(索引数据行),索引行含有索引键值的范围(A~H)和指向下一个索引节点——分支节点(A~D,E~H)的指针。分支节点依次含有索引行,它们带有指向其他分支节点的更细化的值(A~B,…,G~H)。每级分支节点被称为一个索引级别。在B树最底层的节点称为叶子节点。叶子节点含有索引键数据(A,…,H)加上被引用数据位置或数据自身的信息,这主要依赖于索引是非聚集的还是聚集的(这两种索引类型在下一小节介绍)。到达一个叶子节点必须经过的索引级数,决定了找到需要的数据行所必需的I/O数量。 当然,并不一定每个节点都如图5-1所示只包含两个指针。实际上,节点中的每条索引行都含有一个指向其他节点的指针。图5-2是常规索引结构示意图。 5.1.3 索引类型 SQL Server索引有4种类型,即聚集索引、非聚集索引、惟一索引及全文本索引。其中,聚集索引和非聚集索引是两种主要的索引类型。对于这两种索引类型之中的任何一种索引,你都可以指定该索引是否应该是一个惟一索引(实际上它是一种特殊的聚集或非聚集索引)。而全文本索引更像一个目录,它具有与聚集索引和非聚集索引不同的特性,是代表它自己的一类索引。 下面将分别介绍这几种索引。 1.聚集索引(Clustered Index) 聚集索引是一种指明表数据物理存储顺序的索引。在聚集索引中,行的物理存储顺序与索引顺序完全相同,即索引的顺序决定了表中行的存储顺序。表数据按照指定作为聚集索引的一个或多个键列排序并存储。聚集索引类似于一本字典,字典按照字母顺序存储信息,并提供引导字帮助用户快速定位信息的位置,在同一页上找到数据和它的引导字。相似的,聚集索引含有索引页和实际数据页,数据页组成聚集索引的最底层(叶子节点),如图5-3所示。 在图5-3中,根节点中的每行将分别指向分支节点,分支节点的行又将指向其他的分支节点,最后一组分支节点将最终指向叶子节点。当你到达索引的最底层(即叶子节点)时,也就已经到达实际数据页了。因为数据按照一个指定的顺序物理地存储,所以你只能为每个表创建一个聚集索引。 由于聚集索引的顺序与数据行存放的物理顺序相同,因此,聚集索引最适合于范围搜索。因为相邻的行将被物理地存放在相同的页面上或相邻近的页面上,所以当在用于查找一定范围值的列上创建聚集索引时,聚集索引非常有效。 例如,在图书馆中存放着很多书,这些书可以按照作者顺序存放,也可以按照书名顺序存放,还可以按照书的出版社排序存放。假设现在这些书是杂乱存放的,并且在书名列上建立了聚集索引,那么这些书就必须按照书名的顺序重新排放,使得数据(书)按照索引排序。这就是聚集索引。 创建聚集索引应该注意以下事项: ● 每张表只能有一个聚集索引。 ● 创建聚集索引时所需的可用空间应是数据库表中数据量的120%。这是因为在创建聚集索引时表中的数据将被复制以便进行排序,排序完成后,再将旧的未加索引的表删除,所以数据库必须有足够的用来复制的空间。 ● 主键是聚集索引的良好候选者。 ● 缺省设置是非聚集索引。 2. 非聚集索引(Nonclustered Index) 非聚集索引与聚集索引不同,它并不在物理上排列数据,即索引中的逻辑顺序并不等同于表中行的物理顺序。索引仅仅记录指向表中行的位置的指针,这些指针本身是有序的,通过这些指针可以在表中快速地定位数据。 ?

文档评论(0)

1亿VIP精品文档

相关文档