聚集索引可以在移动到不同的表空间后继续存在吗?
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。
我的问题是:
- 将'day'分区合并到'month'分区后是否需要重复聚类?
- 更改table空间后是否需要重复聚类?
- 如果我
VACUUM
分区,是否需要重复聚类?
将数据从一个分区移动到另一个分区会破坏聚类,因此您需要在它之后重新聚类。
ALTER TABLE ... SET TABLESPACE
将按原样复制 table 文件,因此将保留集群。
VACUUM
不移动行,因此聚类也将保留。
我有一个 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。
我的问题是:
- 将'day'分区合并到'month'分区后是否需要重复聚类?
- 更改table空间后是否需要重复聚类?
- 如果我
VACUUM
分区,是否需要重复聚类?
将数据从一个分区移动到另一个分区会破坏聚类,因此您需要在它之后重新聚类。
ALTER TABLE ... SET TABLESPACE
将按原样复制 table 文件,因此将保留集群。VACUUM
不移动行,因此聚类也将保留。