0Pricing
SQL Academy · 课时

为什么要分区:裁剪与维护

了解分区带来的优势:查询裁剪、更快的 VACUUM 和更简单的归档

为什么要分区:裁剪与维护 是 CoddyKit 上的免费 SQL Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 SQL Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 SQL Academy 课程共包含 4 节课。

什么是分区?

将一个逻辑表拆分为多个物理表(分区),每个物理表保存部分行。查询只扫描相关分区。

为什么要使用分区?

大表会带来以下问题:

  • 索引变得非常庞大,查找速度变慢
  • VACUUM 需要数小时
  • 备份速度慢
  • 某些查询会进行不必要的扫描

分区可以解决这四个问题。

分区裁剪

规划器可以 SKIP 不可能匹配 WHERE 子句的分区:

EXPLAIN SELECT * FROM events
WHERE ts >= '2024-03-01' AND ts < '2024-04-01';
-- Only March partition scanned; older partitions skipped.
-- Plan rows: 1M, not 100B.

何时使用分区

在以下情况下使用分区:

  • 表的大小达到 100GB 以上
  • 存在自然的分区键(日期、租户、区域)
  • 大多数查询都会按该键筛选
  • 旧数据可以归档或删除

何时不要使用分区

不要仅仅因为分区听起来很酷就使用它:

  • 小于几 GB 的表不会从中受益
  • 如果查询不按分区键筛选,就不会进行 NO 裁剪
  • 会增加运维复杂度(管理分区)

分区策略

PostgreSQL 支持三种策略:

  • 范围 — 分区覆盖值的范围(日期、ID)
  • 列表 — 分区保存特定值(国家、租户)
  • 哈希 — 使用模哈希实现均匀分布

低成本删除

删除一个分区可以瞬间完成 — 不需要逐行删除:

DROP TABLE events_2023;
-- 100GB gone in milliseconds, no VACUUM aftermath.

更轻松的维护

VACUUM、REINDEX、ANALYZE 都可以按分区运行。维护窗口可以安排在各分区之间,而不必等待一个巨大的批处理完成。

每个分区拥有更小的索引

每个分区都有自己的索引。1GB 分区上的 B-tree 层级少于 1TB 表上的 B-tree — 查找速度更快。

分区是工具,不是万能药

您不会凭空获得性能 — 对按分区键筛选的查询,您获得的是分区裁剪和更轻松的维护。如果这些条件都不满足,您只会增加复杂度。

PostgreSQL 原生(声明式)分区

PG 10 开始提供。每个分区都是真实的表:

CREATE TABLE events (
  id BIGSERIAL,
  ts TIMESTAMPTZ NOT NULL,
  user_id BIGINT,
  data JSONB
) PARTITION BY RANGE (ts);

CREATE TABLE events_2024_01 PARTITION OF events
  FOR VALUES FROM ('2024-01-01') TO ('2024-02-01');

PG10 之前:继承式分区

旧系统使用表继承和触发器。新代码应避免使用 — 声明式分区更简单、速度更快。

回顾

对于大型、按时间分桶或按租户分段的表,分区非常有效。

  • 分区裁剪会跳过不相关的分区
  • 按分区维护速度更快
  • DROP TABLE 可以替代 100GB 的 DELETE
  • 并非万能 — 只有查询匹配分区键时才有帮助

快速检查

您按月份对表进行分区,然后运行 SELECT * FROM events WHERE country = 'US',但没有日期筛选条件。分区有帮助吗?

常见问题解答

「为什么要分区:裁剪与维护」课时是免费的吗?

是的 — 「为什么要分区:裁剪与维护」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 SQL Academy 课程的其余内容,请升级到 CoddyKit PRO。 SQL Academy 课程共包含 4 节课。

「为什么要分区:裁剪与维护」这节课中我会学到什么?

了解分区带来的优势:查询裁剪、更快的 VACUUM 和更简单的归档 你通过在浏览器中直接运行的动手代码来练习 SQL Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 SQL Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 SQL Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「为什么要分区:裁剪与维护」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 SQL Academy 课中编写并运行代码吗?

能。每节 SQL Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么要分区:裁剪与维护
  2. 范围、列表与哈希分区
  3. 分离与附加分区
  4. 高效查询跨分区数据
← 返回 SQL Academy