《第5章 索引》由会员分享,可在线阅读,更多相关《第5章 索引(82页珍藏版)》请在金锄头文库上搜索。
1、第5章 索引,5.1 索引及其结构与类型 5.2 创建索引的列 5.3 操作索引 习题,5.1 索引及其结构与类型,5.1.1 什么是索引 SQL Server中的索引与书的目录很相似,表中的数据类似于书的内容。我们在看书的时候,总是通过书的页号来查看书的内容而不必翻遍书中的每一页。同样SQL Server索引中记录了表中的关键值,提供了指向表中行的指针,使得SQL Server应用程序能够不扫描全表就能够找到想要的数据。因此,索引被定义成一种为了加速对表中数据行的检索而创建的分散存储结构。,索引是针对一个表而建立的,它是由除存放表的数据页面以外的索引页面构成。每个索引页面中的行都含有逻辑指针
2、,以便加速检索物理数据。因此,对表中的列是否创建索引以及创建什么样的索引,对于查询的响应速度都会有很大的影响。创建了索引的列几乎是立即响应,而不创建索引的列,就需较长的等待时间。因为对未创建索引的列,SQL Server 要一行一行地去查询,这种扫描所耗费的时间将随着表中数据量的增加而成正比地增加。 索引既可在定义表时创建,也可以在定义了表之后随时创建。,5.1.2 索引的结构 SQL Server索引的结构一般是一个B树,B树结构以一个根节点开始,这个根节点是索引的起始点,如图5-1所示。根节点包含索引行(索引数据行),索引行含有索引键值的范围(AH)和指向下一个索引节点分支节点(AD,EH)的指针。分支节点依次含有索引行,它们带有指向其他分支节点的更细化的值(AB,GH)。每级分支节点被称为一个索引级别。在B树最底层的节点称为叶子节点。叶子节点含有索引键数据(A,H)加上被引用数据位置或数据自身的信息,这主要依赖于索引是非聚集的还是聚集的(这两种索引类型在下一小节介绍)。到达一个叶子节点必须经过的索引级数,决定了找到需要的数据行所必需的I/O数量。,当然,并不一定每个节点都如图5-1所示只包含两个指针。实际上,节点中的每条索引行都含有一个指向其他节点的指针。图5-2是常规索引结构示意图。,图5-1 索引示例,