GBase 8a
其他
文章

RANGE 分区表——按月份管理历史数据

发表于2026-06-30 15:36:298次浏览0个评论

功能讲解
GBase 8a 支持 RANGE 分区,最常用于按日期范围拆分大表。从逻辑上看是一张表,但底层按分区存储,查询时自动做分区裁剪(只扫描相关分区),大幅提升性能。删除过期数据时直接 DROP PARTITION 即可,秒级释放空间。

使用示例

-- 创建按月 RANGE 分区的交易流水表
CREATE TABLE txn_flow (
   txn_id     BIGINT,
   txn_date   DATE,
   amount     DECIMAL(12,2),
   merchant   VARCHAR(100)
) PARTITION BY RANGE (TO_DAYS(txn_date)) (
   PARTITION p202601 VALUES LESS THAN (TO_DAYS('2026-02-01')),
   PARTITION p202602 VALUES LESS THAN (TO_DAYS('2026-03-01')),
   PARTITION p202603 VALUES LESS THAN (TO_DAYS('2026-04-01')),
   PARTITION p202604 VALUES LESS THAN (TO_DAYS('2026-05-01')),
   PARTITION p202605 VALUES LESS THAN (TO_DAYS('2026-06-01')),
   PARTITION p202606 VALUES LESS THAN (TO_DAYS('2026-07-01'))
);
-- 新增 7 月分区
ALTER TABLE txn_flow ADD PARTITION (
   PARTITION p202607 VALUES LESS THAN (TO_DAYS('2026-08-01'))
);
-- 删除过期分区(秒级释放空间!)
ALTER TABLE txn_flow DROP PARTITION p202601;

-- 查看分区信息
SELECT PARTITION_NAME        AS 分区名,
      PARTITION_DESCRIPTION AS 分区边界值,
      TABLE_ROWS            AS 预估行数
FROM information_schema.partitions
WHERE TABLE_SCHEMA = '你的库名'   -- 替换成你实际的数据库名
 AND TABLE_NAME   = 'txn_flow'
ORDER BY PARTITION_ORDINAL_POSITION;
 

⚠️ 最佳实践
建议按月分区,不要用天/小时(分区数过多会影响性能)
分区数控制在 50~60 个以内
每个分区数据量不宜太小(每节点每分区建议 ≥ 650 万行)
 

评论

登录后才可以发表评论