索引是一种数据结构,用于根据一个或多个属性的值来加快访问关系中元组的速度。创建索引可以提高查询效率,但会减慢对关系的修改操作,因为索引本身也需要随之修改。

教材中主要介绍了两种索引:

  1. 聚簇索引 (Clustered Index)

    • 每个表只能有一个聚簇索引。表的物理行顺序与索引中行的顺序是相同的。键值的唯一性通过显式或隐式的方式来维护。
    • 聚簇索引直接决定了数据在磁盘上的物理存储顺序。
    • 通过聚簇索引访问数据时,由于数据行本身就是按照索引的顺序物理排序的,因此对于范围查询或按序检索大量行的情况通常效率较高。
  2. 非聚簇索引 (Nonclustered Index)

    • 非聚簇索引是 SQL Server 中的默认索引(教材中提到,但这通常也适用于其他数据库)。
    • 它可以有多个(与每个表只能有一个聚簇索引相对)。非聚簇索引中的顺序与表的物理行顺序不一定相同。非聚簇索引包含指向数据行的物理位置的指针。
    • 通过非聚簇索引查找数据时,系统会先在索引结构中根据索引列的值找到对应的索引条目,该条目包含一个指向实际数据行物理位置的指针,然后再通过这个指针去访问数据行。它通过提供一个查找结构来加速访问,而不是直接改变数据行的物理顺序。

简而言之,聚簇索引通过改变数据行的物理存储顺序来加速访问,一个表只能有一个;非聚簇索引通过维护一个独立的查找结构和指向数据行位置的指针来加速访问,一个表可以有多个。两者都是为了提高数据检索速度而设计的。