摘要:哈希分区通过哈希函数将数据均匀分布到不同分区,适用于负载均衡场景。
本文继续针对南大通用GBase 8c 数据库四种分区类型分别阐述其功能、效果及常用使用场景。
3. 哈希分区表
哈希分区通过哈希函数将数据均匀分布到不同分区,适用于负载均衡场景。
适用场景
哈希分区适用于:
需要均匀分布数据以避免热点的场景没有明显范围或列表特征的数据高并发插入和查询场景语法格式
CREATE TABLE partition_table_name
(
[column_name data_type ] [, ... ]
)
PARTITION BY HASH (partition_key)
(PARTITION partition_name )
[, ... ]
;
SQL示例
注:HASH 分区表不支持新建/删除/合并分区
drop table if exists record_hash;
create table record_hash
(
number integer,
name varchar(20),
class varchar(20),
classno varchar(1),
grade integer
)
partition by hash(classno)
(
partition class_01 ,
partition class_02 ,
partition class_03
);
INSERT INTO record_hash (number, name, class, classno, grade) VALUES
(1, 'Alice', 'Class A', 1, 55),
(2, 'Bob', 'Class B', 2, 35),
(3, 'Charlie', 'Class D', 4, 75),
(4, 'David', 'Class A', 1, 45),
(5, 'Eve', 'Class B', 2, 65),
(6, 'Frank', 'Class C', 3, 85),
(7, 'Grace', 'Class A', 1, 70),
(8, 'Hannah', 'Class D', 4, 80),
(9, 'Ivy', 'Class C', 3, 95),
(10, 'Jack', 'Class D', 4, 50),
(11, 'Kate', 'Class B', 2, 60),
(12, 'Leo', 'Class C', 3, 20),
(13, 'Mike', 'Class D', 4, 72),
(14, 'Nancy', 'Class B', 2, 82),
(15, 'Olivia', 'Class C', 3, 92),
(16, 'Peter', 'Class A', 1, 62),
(17, 'Queen', 'Class D', 4, 5),
(18, 'Ryan', 'Class C', 3, 100),
(19, 'Sara', 'Class A', 1, 79), (20, 'Tom', 'Class B', 2, 89);
-- 查询数据
SELECT * FROM record_hash ;
-- 查询分区为 指定的值所在的分区
SELECT * FROM record_hash PARTITION FOR (1);
-- 查询分区为 class_01 的数据
SELECT * FROM record_hash PARTITION (class_03);
-- 重命名分区:将 class_05 改成 class_06
ALTER TABLE record_hash rename PARTITION class_03 to class_04;
-- 查看分区表信息
SELECT relname, boundaries::varchar FROM pg_partition p where p.parentid='record_hash'::regclass order by 1;
来源:GBASE南大通用