您可以创建不同类型的索引以便用于不同的用途。例如,唯一索引将对索引键强制实施唯一性约束;双向索引允许按正向和反向进行扫描;集群索引有助于提高按键顺序遍历表的查询的性能。
唯一索引是这样一种索引,它通过确保表中没有两个数据行具有完全相同的键值来帮助维护数据完整性。
尝试为已经包含数据的表创建唯一索引时,将检查组成该索引的列中的值是否唯一;如果该表包含具有重复键值的行,那么索引创建过程将失败。为表定义了唯一索引之后,每当在索引中添加或更改键时就会强制唯一性。(这包括插入、更新、装入、导入和设置完整性以命名一部分。)除了强制数据值的唯一性以外,唯一索引还可用来提高查询处理期间检索数据的性能。
另一方面,非唯一索引不用于对与它们关联的表强制执行约束。相反,非唯一索引通过维护频繁使用的数据值的排序顺序,仅仅用于提高查询性能。
索引体系结构分为集群或非集群。集群索引是这样的索引:数据页中的行的顺序对应于索引中的行的顺序。这就是为何给定表中只能存在一个集群索引,而表中可以存在多个非集群索引。在某些关系数据库管理系统中,集群索引的叶子节点对应于实际数据,而不是对应于指向位于其他地方的数据的指针。
集群索引和非集群索引都只包含索引结构中的键和记录标识。记录标识始终指向数据页中的行。集群索引和非集群索引的位于区别在于:数据库管理器尝试按照相应的键在索引页中的出现顺序来将数据保存在数据页中。因此,数据库管理器将尝试把具有相似键的行插入同一页中。如果对表进行了重组,那么会按照索引键的顺序将行插入数据页中。
重组与所选索引相关的表将对数据重新建立集群。建立了集群的索引对于带有范围谓词的列非常有用,因为它允许对表中的数据作更有效的顺序访问。由于相似的值在同一数据页上,从而减少页访存次数。
通常,表中只有一个索引可以具有较高的集群度。
由于集群索引使存储在页面中的数据的访问路径更线性化,所以它们可以提高大多数查询操作的性能。此外,由于具有相似索引键值的行都存储在一起,所以在使用集群索引时预取效率通常更高。
通常,如果集群索引是唯一的,那么集群维护起来就更有效率。
了解主唯一键约束与唯一索引之间没有很大差别这一点很重要。数据库管理器使用唯一索引和 NOT NULL 约束的组合来实现主键约束和唯一键约束的关系数据库概念。因此,唯一索引本身不强制执行主键约束,因为它们允许空值。(虽然空值表示未知值,但在建立索引时,将一个空值视为与其他空值相同。)
因此,如果唯一索引由单个列组成,那么只允许一个空值 - 多个空值将违反唯一约束。同样,如果唯一索引由多个列组成,那么值和空值的特定组合只能使用一次。
分区数据可以具有非分区索引(存在于一个数据库分区中的单一表空间中)、可以具有本身在一个数据库分区中的一个或多个表空间之间进行分区的索引或者同时具有这两种索引。对分区表执行滚入操作时(即,使用 ALTER TABLE 语句的 ATTACH PARTITION 子句将一个数据分区连接到另一个表),分区索引特别有用。