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

当数据库中一张表的数据量过大时,会显著影响数据的查询和操作效率。南大通用GBase8c 数据库的解决方式是通过分区表功能,将一张大表从逻辑上划分为多个较小的分区,从而避免一次性处理大量数据,显著提升数据处理和查询性能。分区表尤其适用于时序数据、日志数据、大规模业务数据等场景。

GBase 8c 数据库支持以下四种分区类型:

  • 范围分区表:根据一个或多个列的取值范围划分分区,每个分区存储特定范围内的数据。适用于有明显范围特征的数据,如按时间存储的销售记录、日志数据等。
  • 列表分区表:依据某个列的离散值划分分区,每个分区对应一个值列表。适用于如地区、门店、类型等具有明确枚举值的场景。
  • 间隔分区表:一种特殊的范围分区,可自动根据间隔创建新分区。特别适合按时间自动扩展的场景,如按月度、年度自动分区。
  • 哈希分区表:通过哈希函数将数据均匀分布到不同分区,适用于没有明显范围或列表特征,但需均匀分布数据的场景。

本文将针对这四种分区类型分别阐述其功能、效果及常用使用场景。

1. 范围分区表

范围分区表按照划分范围的方式,分为以下类别:

  • VALUES LESS THAN:通过指定每个分区的上限值来定义分区范围,适用于已知明确上限的情况。
  • START END:通过指定分区的起点、终点或间隔等方式灵活定义分区,支持多种组合形式。

1.1 VALUES LESS THAN范围分区

适用场景

这种分区方式特别适合以下场景:

时间序列数据,如按年、月、日的销售数据

数值范围明确的数据,如按收入区间划分的客户数据

语法格式

sql 复制代码
CREATE TABLE partition_table_name
( [column_name data_type ]
 [, ... ]
)
    PARTITION BY RANGE (partition_key) 
        (
        PARTITION partition_name VALUES LESS THAN (partition_value | MAXVALUE)
        [, ... ]
        );

SQL示例

sql 复制代码
drop table if exists sales_lessthan ;
create table sales_lessthan
(
   order_no integer not null,
   goods_name varchar(30) not null,
   sales_date date not null,
   sales_volume integer,
   sales_store varchar(30)
)
partition by range(sales_date)
(
   partition s1 values less than('2021-04-01 00:00:00'),
   partition s2 values less than('2021-07-01 00:00:00'),
   partition s3 values less than('2021-10-01 00:00:00'),
   partition s4 values less than(maxvalue)
);
INSERT INTO sales_lessthan (order_no, goods_name, sales_date, sales_volume, sales_store) VALUES
(1, 'Blue T-shirt', '2021-01-15', 100, 'Fashion Store A'),
(2, 'Black Jeans', '2021-03-20', 150, 'Clothing Store B'),
(3, 'Running Shoes', '2021-05-10', 120, 'Sports Shop C'),
(4, 'Smartphone Case', '2021-08-05', 80, 'Electronics Store D'),
(5, 'Headphones', '2021-11-30', 200, 'Tech Accessories Store E'),
(6, 'Backpack', '2021-02-25', 90, 'Outdoor Gear Store F'),
(7, 'Sunglasses', '2021-06-15', 180, 'Eyewear Shop G'),
(8, 'Wrist Watch', '2021-09-20', 60, 'Watch Store H'),
(9, 'Gaming Mouse', '2021-12-10', 140, 'Gaming Store I'),
(10, 'Coffee Maker', '2021-04-05', 110, 'Home Appliances Store J');
-- 查询数据
SELECT * FROM sales_lessthan ;
-- 查询分区为 指定的值所在的分区
SELECT * FROM sales_lessthan PARTITION FOR ('2021-3-21 00:00:00');
-- 查询分区为 s4 的数据
SELECT * FROM sales_lessthan PARTITION (s4);
-- 删除分区
alter table sales_lessthan drop partition s2;
-- 分裂分区(B模式不支持):s1分割为s0,s1a;s4分割为s5,s6
ALTER TABLE sales_lessthan SPLIT PARTITION s1 AT('2021-02-01 00:00:00') INTO (PARTITION s0,PARTITION s1a);
ALTER TABLE sales_lessthan SPLIT PARTITION s4 AT('2021-11-01 00:00:00') INTO (PARTITION s5,PARTITION s6);
-- 合并分区(B模式不支持):将s1a、s3合并为s4
ALTER TABLE sales_lessthan MERGE PARTITIONS s1a,s3 INTO PARTITION s4;
-- 重命名分区:将s0改成s1
ALTER TABLE sales_lessthan rename PARTITION s0 to s1;
-- 查看分区表信息
SELECT relname, boundaries::varchar FROM pg_partition p where p.parentid='sales_lessthan'::regclass order by 1;
相关推荐
惜分飞8 小时前
记录一次0丢失的ORA-00354: 损坏重做日志块标头故障恢复---惜分飞
数据库·oracle
cspttty8 小时前
2026秋招供应链分析师技能栈:SQL、Excel、BI与业务分析
数据库·sql·excel
Omics Pro9 小时前
澳科大:自进化AI虚拟细胞
数据库·人工智能·算法·机器学习·自然语言处理
ShineWinsu9 小时前
对于MySQL:索引的解析
linux·数据库·mysql·面试·笔试·索引·海量数据
我是苏苏9 小时前
Redis开发09:Windows系统下主从复制的配置教程
数据库·redis·缓存
数据狐(Datafox)9 小时前
京东商品列表API接口解析(附 JSON 样例)
数据库·爬虫·json
troy12820 小时前
向量数据库选型指南:Milvus / Qdrant / Chroma / pgvector
数据库·milvus
彧azz21 小时前
Redis 全面指南:从核心概念到高可用架构实战
数据库·redis·架构
DBA小马哥21 小时前
MongoDB 数据同步怎么做?oplog、Change Streams、同步工具 4 种方案一次讲清(附踩坑清单)
数据库·mongodb