聚簇索引能否幸免于被转移到其他表空间?

时间:2018-11-10 14:52:30

标签: postgresql query-performance clustered-index

我有一个最初按天分区的表。每天结束时,不会再有更多记录添加到该分区,因此我对索引进行聚类,然后对该表进行大量的数字运算和聚合(使用我聚类的索引):

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; 

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

ALTER TABLE ... SET TABLESPACE ...

最后,我最初对索引进行聚类肯定会提高针对该索引运行的查询的性能。

我知道集群是一次性命令,如果添加/删除新记录,则需要重复集群。

我的问题是:

  • 将“ day”分区合并到“ month”分区后,我是否需要重复集群操作?
  • 更改表空间后是否需要重复集群操作?
  • 如果我VACUUM分区,是否需要重复集群操作?

1 个答案:

答案 0 :(得分:1)

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

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

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