HASH分区
HASH分区表是按分区列的HASH计算结果来决定其分区的,而特定的分区列其HASH值是固定的,也就是说HASH分区表的数据是按分区列值来聚集的,同样的分区列肯定在同一分区。
创建HASH分区
语法图解
语法格式
HASH ( <fragment_key> {,<fragment_key>} )
( PARTITION [ partition_name ] [ DBSPACE dbspace_name ]
{, PARTITION [ partition_name ] [ DBSPACE dbspace_name ]}
)
参数说明
元素 | 描述 | 限制 |
---|---|---|
fragment_key | 分区列名称 | 必须是表中的列 |
partition_name | 分区名称 | |
dbspace_name | dbspace名称 | 不指定dbspase则为当前数据库默认的表空间;指定的dbspase需存在 |
管理HASH分区
HASH分区的管理支持增加分区(add子句)、截断分区(truncate子句)和结合分区(coalesce子句)。
语法格式
--增加分区
<alter_fragmennt_on_table> ADD PARTITION [ partition_name ] [ DBSPACE dbspace_name ]
--结合分区
<alter_fragmennt_on_table> COALESCE PARTTITION
--截断分区
TRUNCATE PARTITION partition
增加分区
增加分区,数据会重新在增加分区后的所有分区中根据哈希运算结果重新分布。
结合分区
结合分区是针对哈希分区或者包含哈希分区的复合分区的,目的是减少分区数。被结合的分区是由数据库自动选择的,结合完成后该分区会被删除,数据会被合并至其它某个数据库指定分区中,分区数大于等于2个才支持结合操作。
截断分区
主要功能为清空哈希分区表中的数据,但哈希分区表本身并不删除。
示例
- 人员表user中,按照部门字段departmentID作为分区列进行HASH分区
CREATE TABLE USER(
name varchar(20),
departmentID int,
age int,
address varchar(50)
)PARTITION BY HASH(departmentID)
(
partition p1 DBSPACE dbs1,
partition p2 DBSPACE dbs2,
partition p3 DBSPACE dbs3
);
- 人员表user增加一个分区p4:
ALTER FRAGMENT ON TABLE USER ADD PARTITION p4 DBSPACE dbs4;
- 人员表user执行1次结合分区,从而自动减少1个分区:
ALTER FRAGMENT ON TABLE USER COALESCE PARTITION;
- 人员表user清空掉p1分区数据
ALTER FRAGMENT ON TABLE USER TRUNCATE PARTITION p1;