为什么要分区:裁剪与维护
了解分区带来的优势:查询裁剪、更快的 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 反馈 — 无需本地设置。
此课程中的所有课时
- 为什么要分区:裁剪与维护
- 范围、列表与哈希分区
- 分离与附加分区
- 高效查询跨分区数据