标准答案

  1. 时间范围分区适合按时间查询、归档和删除历史数据;列表分区适合有限且稳定的类别;哈希分区适合均匀分散,但不方便按时间生命周期管理。
  2. 查询包含可推断的分区键条件时,partition pruning 可以减少访问分区;如果没有分区键条件,查询仍可能扫描大量甚至全部分区。
  3. 分区数量、分区级索引、唯一约束、跨分区 JOIN、分区创建和写入路由都会增加运维复杂度。
  4. 分区不是自动分库,也不自动解决热点、复制、备份和容量问题;单个分区仍可能被热点查询或写入打满。
  5. 上线前要验证边界时间、跨分区查询、默认分区、分区不存在时的写入失败和归档后的恢复路径。

题目解析

分区的收益来自减少扫描和缩小维护范围,不是把表“切碎”本身。一个没有分区键条件的后台查询可能仍要访问所有分区,反而增加计划和连接开销。

时间分区还涉及数据生命周期:新分区要提前创建,旧分区要安全归档,跨边界时间和时区必须定义清楚,否则可能出现写入失败或漏查。

选择分区前应拿真实查询和数据增长曲线验证;如果只是单表索引就能解决问题,分区带来的对象、约束和迁移复杂度可能不值得。

常见误区

  • 误区:分区越多查询越快。改正:分区过多会增加规划、维护和跨分区查询成本,关键是能否有效裁剪。
  • 误区:分区后所有查询都会自动变快。改正:没有分区键条件或热点集中时,仍可能扫描全部分区或打满单个分区。
  • 误区:只设计正常时间范围,不设计默认分区和边界。改正:要验证跨时区、边界值、未来分区、归档和异常写入。

作者信息