1
数据库技术及应用
1.10.2.1 7.2.1 索引的概念
7.2.1 索引的概念

1.索引的定义

索引是一个单独的、物理的数据结构,是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。

索引是基于表建立的,提供了编排表中数据的内部方法。在基本表中一部分用来存放表的数据页面,一部分用来存放索引页面。建立索引是提高查询速度的有效手段,与书中的目录索引一样,数据库中的索引可以快速找到表或索引视图中的特定信息。但创建索引要花费时间和占用存储空间,也降低了数据修改的速度。

在SQL-86和SQL-89标准中,基本表没有主键概念,采用索引机制。索引属于物理存储路径概念,在定义基本表时,需要定义索引,这样就把数据库的物理结构和逻辑结构混在一起了。因此,在SQL-92标准中引入了主键概念,用户在创建基本表时用主键子句直接定义主键,但至今大多数关系数据库管理系统仍使用索引机制,具有索引创建和删除语句的功能。

2.索引的分类

索引是与表或视图关联的磁盘上的结构,可以加快从表或视图中检索行的速度。索引包含由表或视图中的一列或多列生成的键。这些键存储在一个结构(B树)中,使SQL Server可以快速有效地查找与键值关联的行。表或视图可以包含以下类型的索引。

1)聚集索引

聚集索引根据数据行的键值在表或视图中排序和存储这些数据行。索引定义中包含聚集索引列。每个表只能有一个聚集索引,因为数据行本身只能按一个顺序排序。

只有当表包含聚集索引时,表中的数据行才按排序顺序存储。如果表具有聚集索引,则该表称为聚集表。如果表没有聚集索引,则其数据行存储在一个称为堆的无序结构中。

2)非聚集索引

非聚集索引具有独立于数据行的结构。非聚集索引包含非聚集索引键值,并且每个键值项都有指向包含该键值的数据行的指针。

从非聚集索引中的索引行指向数据行的指针称为行定位器。行定位器的结构取决于数据页是存储在堆中还是聚集表中。对于堆,行定位器是指向行的指针。对于聚集表,行定位器是聚集索引键。

一个表中最多只能有一个聚集索引,但可有一个或多个非聚集索引,最多可包含999个非聚集索引。如果在表上创建聚集索引时,表内的行才按特定顺序存储,如果一个表只有非聚集索引,它的数据行将按无序的堆集方式存储。创建索引时,可指定是按升序还是降序存储键。

注意:

(1)索引可以是唯一的,意味着不会有两行记录相同的索引键值,这样的索引称为唯一索引。如果索引是根据多列组合创建的,这样的索引称为复合索引。

(2)索引是非显示的,查询时自动调用。

(3)当表中创建主键约束(PRIMARYKEY)时,SQL Server将自动创建唯一性聚集索引;当表中创建唯一性约束(UNIQUE)时,SQL Server自动创建一个唯一性非聚集索引。若表中已有数据,那么在创建索引时,SQL Server会检查数据的合法性,若有不合法数据,则创建索引失败。