首页 > 数据库 > 国内数据库 > 南大通用GBase 8c 数据库分区表实践探秘(一)
当数据库中一张表的数据量过大时,会显著影响数据的查询和操作效率。 南大通用GBase8c 数据库的解决方式是通过 分区表功能,将一张大表从逻辑上划分为多个较小的分区,从而避免一次性处理大量数据,显著提升数据处理和查询性能。分区表尤其适用于时序数据、日志数据、大规模业务数据等场景。
GBase 8c 数据库支持以下四种分区类型:
本文将针对这四种分区类型分别阐述其功能、效果及常用使用场景。
范围分区表按照划分范围的方式,分为以下类别:
适用场景
这种分区方式特别适合以下场景:
时间序列数据,如按年、月、日的销售数据
数值范围明确的数据,如按收入区间划分的客户数据
语法格式
CREATE TABLE partition_table_name
( [column_name data_type ]
[, ... ]
)
PARTITION BY RANGE (partition_key)
(
PARTITION partition_name VALUES LESS THAN (partition_value | MAXVALUE)
[, ... ]
);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_l
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69979120/viewspace-3094710/ ,如需转载,请注明出处,否则将追究法律责任。