聚集索引可以在移动到不同的表空间后继续存在吗?

Can a clustered index survive being moved to a different tablespace?

我有一个 table 最初是按天划分的。每天结束时,不会有更多记录添加到该分区,所以我对索引进行聚类,然后在 table 上进行大量数字 c运行ching 和聚合(使用索引我聚类):

CLUSTER table_a_20181104 USING table_a_20181104_index1;

几天后(通常是一周),我将一天的分区合并到一个更大的分区中,该分区包含该月所有日期的数据。我用这个 SQL 来实现这个:

WITH moved_rows AS 
( 
    DELETE FROM table_a_20181104 
    RETURNING * 
) 
INSERT INTO table_a_201811 
SELECT * FROM moved_rows; 

大约一个月后,我更改了 table 空间以将数据从 SSD 磁盘移动到传统的磁性硬盘。

ALTER TABLE ... SET TABLESPACE ...

我在一天结束时对索引的初始聚类确实提高了针对它的查询 运行 的性能。

我知道聚类是一次性命令,如果有新记录 added/removed,则需要重复执行 added/removed。

我的问题是:

  • 将数据从一个分区移动到另一个分区会破坏聚类,因此您需要在它之后重新聚类。

  • ALTER TABLE ... SET TABLESPACE 将按原样复制 table 文件,因此将保留集群。

  • VACUUM 不移动行,因此聚类也将保留。