0
0
Postgre SQL 表分区
2024-10-12
文章摘要
|
为什么要对表进行分区?
表分区允许将一个大表拆分为多个小表,这样可以带来以下好处:
- 较小的表在读取和写入方面速度更快。
- 您可以非常高效地删除整个分区,而不是逐行删除数据。
- 由于 PostgreSQL 知道如何修剪未用到的分区,因此您可以将分区用作一种粗略索引。例如,通过按日期划分表,您可能不再需要日期字段上的索引,而是使用顺序扫描。
- 很少使用的分区可以移动到更便宜的存储中。
分区方式
- 按范围分区
CREATE TABLE measurements (
id int8 NOT NULL,
value float8 NOT NULL,
date timestamptz NOT NULL
);
# 按范围分区
CREATE TABLE measurements_y2021m01 PARTITION OF measurements
FOR VALUES FROM ('2021-01-01') TO ('2021-02-01');
- 按列表分区
CREATE TABLE measurements (
id int8 PRIMARY KEY,
value float8 NOT NULL,
date timestamptz NOT NULL,
hot boolean
) PARTITION BY LIST (hot);
CREATE TABLE measurements_hot PARTITION OF measurements
FOR VALUES IN (TRUE);
CREATE TABLE measurements_cold PARTITION OF measurements
FOR VALUES IN (NULL);
- 按哈希分区
CREATE TABLE measurements (
id int8 PRIMARY KEY,
value float8 NOT NULL,
date timestamptz NOT NULL
) PARTITION BY HASH (id);
CREATE TABLE measurements_1 PARTITION OF measurements
FOR VALUES WITH (MODULUS 3, REMAINDER 0);
CREATE TABLE measurements_2 PARTITION OF measurements
FOR VALUES WITH (MODULUS 3, REMAINDER 1);
CREATE TABLE measurements_3 PARTITION OF measurements
FOR VALUES WITH (MODULUS 3, REMAINDER 2);
- 分离和附加分区
ALTER TABLE measurements DETACH PARTITION measurements_y2021m01;
ALTER TABLE measurements ATTACH PARTITION measurements_y2021m01
FOR VALUES FROM ('2021-01-01') TO ('2021-02-01');
