分区与冷热分离

按时间或范围把大表拆分为分区,历史分区可归档到低成本存储;分区裁剪让查询只扫描相关分区,同时把批量维护(删除历史)变成分区级操作。

策略按时间范围分区最常见;哈希分区可用均衡写入
收益查询裁剪、历史归档、批量清理更快
注意唯一约束需包含分区键;跨分区查询成本仍在

按时间分区示例(MySQL 语法示意)

按时间分区示例(MySQL 语法示意)
ALTER TABLE orders PARTITION BY RANGE (TO_DAYS(created_at)) (
  PARTITION p202601 VALUES LESS THAN (TO_DAYS('2026-02-01')),
  PARTITION p202602 VALUES LESS THAN (TO_DAYS('2026-03-01')),
  PARTITION pmax    VALUES LESS THAN MAXVALUE
);
-- 归档历史:整体删除分区,避免逐行 DELETE
ALTER TABLE orders DROP PARTITION p202501;
  • 分区键要出现在高频查询条件里,才能触发分区裁剪
  • 按周期滚动新建分区并归档旧分区,避免数据堆在默认分区
  • 唯一约束(含主键)必须包含分区键,设计表时先确认
  • 分区调整后校验统计信息与自动维护任务的执行情况
分区不是分库:单库分区上限与维护成本要评估,超大规模需要结合分片方案。

易错点

  • 唯一索引未含分区键,约束无法建立
  • 分区数量无上限增长,元数据管理开销上升

数据来源与参考

  • MySQL 8.0 Reference Manual:Partitioning
  • 《数据密集型应用系统设计》(Kleppmann)第 6 章
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌