Skip to content

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 表分区

|下一篇:Postgre SQL 的三种不同数据持久性