集群

集群是一种用于排列表中的行的方法,目的是使这些行在磁盘中的物理顺序与索引中条目的顺序密切相关。

(不要将集群索引与光盘集群混淆在一起,后者是一种将逻辑上相关的 TEXT 或 BYTE 数据一起存储于光盘卷上的方法。)

如果您知道某个表是按照确定索引排序的,您就可以避免排序。 您还可以确定,按该列搜索该表时,顺序读取要比非顺序读取有效。 这些要点均包含于查询和查询优化器中。
技巧: 有关通过将索引改变为集群来消除交错的扩展数据块的信息,请参阅创建或变更集群索引
stores_demo 数据库中,orders 表在 postal-code 列上具有一个索引 zip_ix。以下语句使得数据库服务器将 customer 表中的行按邮政编码的降序排列:
ALTER INDEX zip_ix TO CLUSTER
要将表在非索引列上进行集群,必须创建一个索引。 以下语句按订单日期对 orders 表重新进行排序:
CREATE CLUSTER INDEX o_date_ix ON orders (order_date ASC)

要对表重新进行排序,数据库服务器必须复制该表。 在前述示例中,数据库服务器读取表中所有行,并建立索引。 然后再顺次读取索引条目。 对每个条目,读取表中匹配的行,并将其复制到一个新表中。 新表的行按希望的顺序排列。 此新表将替换掉旧表。

在更改一个表时,并不保留集群。插入新行时,在物理上 它们会存储于表的末尾,而不管它们的内容。 更新行和更改集群列的值时,就会将那些行写回到表中原来的位置。

聚类可以在行的顺序被正在进行的更新打乱之后复原。以下语句对表重新排序,从而按照索引顺序复原数据行:
ALTER INDEX o_date_ix TO CLUSTER

重新集群通常比初始集群快,因为读取几乎已集群的表中的行在 I/O 影响方面与顺序扫描类似。

集群和重新集群要花费大量空间和时间。 要避免集群,可以在一开始就以希望的顺序来建立表。