集群是一种用于排列表中的行的方法,目的是使这些行在磁盘中的物理顺序与索引中条目的顺序密切相关。
(不要将集群索引与光盘集群混淆在一起,后者是一种将逻辑上相关的 TEXT 或 BYTE 数据一起存储于光盘卷上的方法。)
ALTER INDEX zip_ix TO CLUSTER
CREATE CLUSTER INDEX o_date_ix ON orders (order_date ASC)
要对表重新进行排序,数据库服务器必须复制该表。 在前述示例中,数据库服务器读取表中所有行,并建立索引。 然后再顺次读取索引条目。 对每个条目,读取表中匹配的行,并将其复制到一个新表中。 新表的行按希望的顺序排列。 此新表将替换掉旧表。
在更改一个表时,并不保留集群。插入新行时,在物理上 它们会存储于表的末尾,而不管它们的内容。 更新行和更改集群列的值时,就会将那些行写回到表中原来的位置。
ALTER INDEX o_date_ix TO CLUSTER
重新集群通常比初始集群快,因为读取几乎已集群的表中的行在 I/O 影响方面与顺序扫描类似。
集群和重新集群要花费大量空间和时间。 要避免集群,可以在一开始就以希望的顺序来建立表。