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;
相关推荐
liweiweili1267 分钟前
基于金庸武侠小说人物关系设计的完整 SQL 语句,包括数据库创建、表结构定义和示例数据插入
数据库·sql·oracle
梓沂1 小时前
centos7 安装memcached
数据库·缓存·memcached
她说人狗殊途2 小时前
[特殊字符] MySQL性能参数查询总结
数据库·mysql
TDengine (老段)2 小时前
TDengine 数据订阅支持 MQTT 协议用户手册
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
灵犀物润2 小时前
MySQL 8 与 PostgreSQL 17 对比分析及迁移指南
数据库·mysql·postgresql
IBMS楼宇自控3 小时前
IBMS-建筑内分散的子系统(如 BA、安防、消防、能源、电梯等)进行数据互联、功能协同与智能管控
大数据·数据库·人工智能
跑跑快跑4 小时前
Macbook安装MySQL报错
数据库·mysql
GBASE4 小时前
GBASE南大通用技术分享:GBase 8c 数据库分区表实践探秘(二)
数据库
开开心心就好5 小时前
文档格式转换软件 一键Word转PDF
开发语言·前端·数据库·pdf·c#·word