创建或变更集群索引

根据情况,您可以通过创建集群索引或更改集群索引来消除扩展数据块交错。 使用 CREATE INDEX 或 ALTER INDEX 语句的 TO CLUSTER 子句时,数据库服务器对表进行排序并重新构建表。

TO CLUSTER 子句对物理表中的行重新排序以匹配索引中的顺序。有关更多信息,请参阅集群

在以下条件下,TO CLUSTER 子句消除的交错扩展数据块:
  • 块必须包含连续的空间,其大小应足以重新建立每个表。
  • 数据库服务器必须使用此邻接空间重新建立表。

    如果在此较大的邻接空间之前还存在成块的可用空间,数据库服务器可能首先分配较小的成块空间。 数据库服务器从块的起始处为 ALTER INDEX 进程分配空间,寻找成块的可用空间(大于或等于为下一个扩展数据块指定的大小)。如果数据库服务器用分散在块中较小的成块的可用空间重新建立表,它不会消除扩展数据块交错现象。

要显示可用空间块的位置和大小,请执行 oncheck -pe 命令。

要使用 ALTER INDEX 语句的 TO CLUSTER 子句:

  1. 对于块中的每个表,除想要建立集群的索引以外,删除其他所有分段索引或拆离索引。
  2. 使用 ALTER INDEX 语句的 TO CLUSTER 子句为其余的索引建立集群。
    通过重新排列行来重建表时,此步骤可以消除扩展数据块的交错。
  3. 重新创建所有其他索引。

对索引建立集群前无需删除索引。但是,ALTER INDEX 进程比 CREATE INDEX 更快,因为数据库服务器使用索引按集群顺序来读取数据行。另外,生成的索引压缩程度更高。

要防止问题再次发生,可考虑增加表空间扩展数据块的大小。