集群索引

聚类索引决定表空间中行实际排序(聚类)的方式。 在部分操作中,尤其是涉及大量记录的操作中,聚簇索引能够显著提升性能。 受益于聚簇索引的操作包括分组操作、排序操作以及非相等比较。

除了基于表达式的索引和XML索引之外,任何索引都可以是聚类索引。 一个表上只能定义一个聚簇索引。

您可以在分区表空间或分段表空间上定义聚簇索引。 在分区表空间中,聚集索引可以是分区索引,也可以是二级索引。 如果分区表上的聚集索引不是分区索引,则行在每个数据分区内按聚集顺序排序,而不是跨分区排序。 (在 Db2 UDB for 版本 8 之前,分区索引必须是聚类索引)。 z/OS® 版本之前,分区索引必须是聚类索引)

限制 :基于表达式的索引或XML索引不能是聚簇索引。

当表具有聚集索引时,INSERT语句会使 Db2 尽可能按照索引值的顺序插入记录。 除非您在创建或修改其他索引时明确指定CLUSTER,否则您在表中定义的第一个索引将隐式用作聚簇索引。 例如,如果您首先在 EMP 表 EMPNO 列上定义一个唯一索引,则 Db2 会按员工识别号顺序向 EMP 表中插入行,除非您明确定义另一个索引作为聚集索引。

虽然一个表可以有多个索引,但只有一个索引可以是聚簇索引。 如果您没有为表定义聚类索引, Db2 会在排序数据行时将表上创建的第一个索引识别为隐式聚类索引。

提示:
  • 请始终定义一个聚类索引。 否则, Db2 可能不会选择您希望用于索引的键。
  • 定义聚类索引的顺序,以支持大容量数据处理。

使用CREATE INDEX或ALTER INDEX语句中的CLUSTER子句来定义聚簇索引。

示例

开始通用编程接口信息。 假设您经常需要按部门收集员工信息。 在EMP表中,您可以为DEPTNO列创建一个聚类索引。
CREATE INDEX DEPT_IX
  ON EMP
    (DEPTNO ASC)
     CLUSTER;

因此,同一部门的所有行可能都靠得很近。 Db2 通常一次读取即可访问该部门的所有行。 (使用聚类索引并不能保证同一部门的全部行都存储在同一页上。 实际存储的行数取决于行的大小、行数和可用空间。 同样,有些页面可能包含多个部门的行。)

通用编程接口信息结束。

下图显示了EMP表DEPT列的聚类索引;仅显示了一部分行。

图 1。 EMP表上的聚类索引
开始图描述。 该图显示了EMP表DEPT列的聚类指数;仅显示了部分行。 结束图描述。

假设您随后在同一张表上创建了聚簇索引。 在这种情况下, Db2 将其标识为聚集索引,但不会重新排列表中已有的数据。 数据的组织方式与您创建的原始非聚类索引相同。 然而,当REORG实用程序重新组织表空间时, Db2 会根据新的聚类索引的顺序对数据进行聚类。 因此,如果您确定需要聚类索引,则应在加载表之前定义聚类索引。 如果无法做到,您必须定义索引,然后重新组织表格。 如果在加载表后创建或删除并重新创建聚簇索引,这些更改将在后续重组后生效。