TiDB 分区表二级分区问题咨询

Hi 我希望一级分区用 range,二级分区做 hash,目前看 TiDB 不支持分区表的二级分区,但 OB 支持请问 TiDB 是否有类似功能?

  • 截止 TiDB v8.5.x(你当前使用版本)完全不支持标准 SUBPARTITION 二级分区语法,写 PARTITION BY RANGE ... SUBPARTITION BY HASH 语法不会报错,但内核只会识别一级 Range,子分区逻辑不会生效,等价于普通一级 Range 分区,达不到 OceanBase Range+Hash 二级分区效果GitHub。官方至今无正式 GA 二级分区的 roadmap,社区长期诉求但暂未落地。
  • 你的诉求本质:按时间 Range 做冷热数据滚动删除(DROP PARTITION)+ 单时间分片内用 Hash 打散写入热点。TiDB 有三套成熟替代方案,按落地成本、贴合度排序给出方案。两款分布式数据库各有各的特点

看下分区表中的全局索引,有点小复杂,看看是否符合你的要求

分区处理,有个缺点无法命中索引,所以后面追加了这个能力

确实不支持 二级分区

确实,TiDB 目前还不支持二级分区(range+hash 这种组合)。不过可以试试变通方案:如果数据量不大,直接用单层 hash 分区;或者按业务需求,手动拆成多张表,用分区裁剪逻辑控制查询范围。另外,TiDB 在 6.x 版本后加强了分区表性能,建议评估下是否真需要二级分区。

学习了

留个痕迹,回来学习

TiDB 目前不支持二级分区(subpartition)。可用组合键/更细的一级分区策略近似,或业务层分表。若强依赖二级分区语义,需评估架构是否换方案,而不是等 TiDB 完全对齐 OB。

ob二级分区更慢,没有必要

一级分区直接按时间做RANGE / RANGE INTERVAL(按月 / 按季度),不做二级分区,利用 PRE_SPLIT_REGIONS 对每个分区预先拆出多个 Region 打散数据,模拟二级 hash 的打散效果

TiDB目前不支持类似OceanBase的二级分区如Range-Hash组合功能。

截至目前 TiDB 分区表不支持二级(子)分区,RANGE + HASH 子分区这类语法/能力与 OceanBase 不对齐。

常见替代:
1)单级 RANGE/HASH/KEY 分区,把多维条件折进分区键或复合分区键策略
2)应用层按业务维度分表 + 视图/UNION ALL
3)依赖 Region 自动分裂与合理索引,小表不必强行分区

若强依赖二级分区语义,需要在产品侧跟踪官方 roadmap,或在建模阶段改成分区键可覆盖的单级方案。