GBASE南大通用技术分享:GBase 8c 数据库分区表实践探秘(五)

本文继续介绍南大通用GBase 8c 数据库第四种分区类型。

4. 间隔分区表

间隔分区是范围分区的扩展,支持自动创建新分区。

适用场景

间隔分区特别适合:

  • 按时间自动增长的数据,如日志、监控数据
  • 无法预先确定分区范围的场景
  • 需要减少分区维护工作量的应用

语法格式

方式一:START(partition_value) END (partition_value | MAXVALUE)方式

sql 复制代码
CREATE TABLE partition_table_name
( [column_name data_type ]
[, ... ]
)
    PARTITION BY RANGE (partition_key) 
        (
          INTERVAL ('interval_expr') 
          PARTITION partition_name START(partition_value) END (partition_value | MAXVALUE)
          [, ... ]
        ); 

方式二:START(partition_value) END (partition_value) EVERY (interval_value)方式

sql 复制代码
CREATE TABLE partition_table_name
( [column_name data_type ]
[, ... ]
)
    PARTITION BY RANGE (partition_key)  
        (
          PARTITION partition_name START(partition_value) END (partition_value) EVERY (interval_value)
          [, ... ]  
        ); 

方式三:START(partition_value)方式

sql 复制代码
CREATE TABLE partition_table_name
( [column_name data_type ]
[, ... ]
)
    PARTITION BY RANGE (partition_key)  
        (
          INTERVAL ('interval_expr') 
          PARTITION partition_name START(partition_value) 
          [, ... ]  
        ); 

方式四:END(partition_value | MAXVALUE)方式

sql 复制代码
CREATE TABLE partition_table_name
( [column_name data_type ]
[, ... ]
)
    PARTITION BY RANGE (partition_key)  
        INTERVAL ('interval_expr') 
        (
          PARTITION partition_name END(partition_value | MAXVALUE) 
          [, ... ]  
        );

SQL示例

sql 复制代码
drop table if exists t_auto_create_partition;
create table t_auto_create_partition (
   r_id varchar(32) not null,
   s_id varchar(200),
   r_ratio varchar(100),
   create_time timestamp without time zone default localtimestamp not null
) partition by range ("create_time") interval ('1 month') 
(
   partition p1 values less than('2020-01-01 00:00:00')
);
-- 插入测试数据
INSERT INTO t_auto_create_partition (r_id, s_id, r_ratio, create_time)
VALUES
   ('1', 's1', 'ratio1', '2020-01-01 10:00:00'),
   ('2', 's2', 'ratio2', '2021-02-01 10:00:00'),
   ('22', 's22', 'ratio2', '2021-02-03 10:00:00'),
   ('3', 's3', 'ratio3', '2022-03-01 10:00:00'),
   ('4', 's4', 'ratio4', '2023-04-01 10:00:00'),
   ('5', 's5', 'ratio5', '2024-05-01 10:00:00'),
   ('6', 's6', 'ratio6', '2025-06-01 10:00:00'),
   ('7', 's7', 'ratio7', '2020-03-06 10:00:00'),
   ('8', 's8', 'ratio8', '2019-07-04 10:00:00')
;
-- 查询数据
SELECT * FROM t_auto_create_partition ;
-- 查询分区数据
select * from t_auto_create_partition partition(p1);
select * from t_auto_create_partition partition(sys_p7);
-- 删除分区
alter table t_auto_create_partition drop partition sys_p3;
-- 分裂分区(B模式不支持): sys_p5 分割为 sys_p5_1,sys_p5_2
ALTER TABLE t_auto_create_partition SPLIT PARTITION sys_p5 AT('2024-05-15 00:00:00') INTO (PARTITION sys_p5_1,PARTITION sys_p5_2);
-- 合并分区(B模式不支持):将sys_p5_1,sys_p5_2 合并为sys_p5_3
ALTER TABLE t_auto_create_partition MERGE PARTITIONS sys_p5_1,sys_p5_2 INTO PARTITION sys_p5_3;
-- 重命名分区:将sys_p7 改成 sys_p8
ALTER TABLE t_auto_create_partition rename PARTITION sys_p7 to sys_p8;
-- 查看分区表信息
SELECT relname, boundaries::varchar FROM pg_partition p where p.parentid='t_auto_create_partition'::regclass order by 1;

5. 实际应用建议

分区键选择原则:1) 选择经常作为查询条件的列;2) 选择数据分布均匀的列;3) 避免选择频繁更新的列;4) 考虑业务数据的自然边界。

为了提升性能,本文总结了一些优化建议:

  • 结合分区键建立本地索引
  • 定期检查和维护分区统计信息
  • 移除不再需要的过期分区
  • 监控分区数据分布均匀性
相关推荐
数据工匠老o8 分钟前
"能用应用层解决的不用存储过程",十年数据库经验总结
数据库·架构
AC赳赳老秦17 分钟前
公开音频转写信息提取:OpenClaw 处理发布会与听证会文本并提取核心决策信息
大数据·开发语言·汇编·数据库·人工智能·deepseek·openclaw
老纪的技术唠嗑局35 分钟前
异步索引特性解析:OceanBase 如何提升持续写入场景下的索引检索性能
数据库
老纪的技术唠嗑局40 分钟前
Tibo 谈 Codex:harness 总比模型快一步
数据库·人工智能
猫咪宝妖1 小时前
信息安全工程师 第四级 结构化保护级
网络·数据库·安全
Andreapiki1 小时前
风险审计校招技术栈拆解:SQL、Python、Power BI在2026届JD中的真实权重
数据库·python·sql
nvd112 小时前
从存算一体到现代湖仓:对标传统关系型数据库透视 Bucket + Iceberg + Trino 的物理本质
数据库·bigdata
JosieBook2 小时前
【数据库】MySQL 实战精通系列 · 第8篇:慢查询治理与性能优化实战
数据库·mysql·性能优化
TDengine (老段)2 小时前
TDengine TSDB 实战排障四(升级与兼容)
android·java·大数据·数据库·物联网·时序数据库·tdengine
小小龙学IT3 小时前
Go 泛型(Generics)深度解析:从类型参数到生产实践
开发语言·数据库·golang