Postgre SQL 表分区
为什么要对表进行分区?
表分区允许将一个大表拆分为多个小表,这样可以带来以下好处:
- 较小的表在读取和写入方面速度更快。
- 您可以非常高效地删除整个分区,而不是逐行删除数据。
- 由于 PostgreSQL 知道如何修剪未用到的分区,因此您可以将分区用作一种粗略索引。例如,通过按日期划分表,您可能不再需要日期字段上的索引,而是使用顺序扫描。
- 很少使用的分区可以移动到更便宜的存储中。
分区方式
- 按范围分区
sql
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');
- 按列表分区
sql
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);
- 按哈希分区
sql
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');
最近更新:10/12/2024, 1:01:52 PM
原文链接:Postgre SQL 表分区
上一篇:vue右键弹出菜单(vue-contextmenu)|下一篇:Postgre SQL 的三种不同数据持久性