目录
文档用途
详细信息
文档用途
了解HGDB分区表的简单使用
详细信息
1.简介
数据库表分区把一个大的物理表分成若干个小的物理表,并使得这些小物理表在逻辑上可以被当成一张表来使用。
一般来讲我们把上述说明中的大的物理表称为父表/主表,小的物理表称为子表/分区表。
主表/父表/Master Table 该表是创建子表的模板。它是一个正常的普通表,但正常情况下它并不储存任何数据。
子表/分区表/Child Table/Partition Table 这些表继承并属于一个主表。子表中存储所有的数据。主表与分区表属于一对多的关系,也就是说,一个主表包含多个分区表,而一个分区表只从属于一个主表。
分区表 KEY的概念是表中一列或多个列组成的列的集合,该集合用于设定分区表的分区规则。所谓分区规则就是为分区表中的每个分区定义不同的约束条件,当向分区表中插入数据时,分区规则就会根据这些约束条件决定向哪个分区中插入。
2.分区表的使用
2.1分类
HGDB可以支持范围分区(range partition)、列表分区(list partition)和哈希分区(hash partition)三种分区创建分区表时,具体使用哪种分区,具体要看建表的使用场景或要设置为KEY的字段属性来决定:
1)范围分区
在范围分区中,分区规则根据 KEY 按照不同的范围映射到不同的分区中,每个分区的范围都是由一个上限值和下限值来决定,这两个值是在创建分区表时定义的。范围分区的KEY可由多个列(最多可由32 个列)组成。值得一提的是,当KEY 由多个列组成时,除了第一列的各分区约束范围之间不能重叠外,其他列的分区范围可以有重叠。范围分区适用于组成KEY是连续的,可以根据需要设定上下限的列。实际上,在分区表的应用中,范围分区是最普遍,最常用的分区类型
2)列表分区
列表分区的 KEY 只能包含一个。在列表分区中,分区规则是由 KEY 的一系列离散值组成。也就是向列表分区插入数据时,只有等于这些离散值时才会执行插入。很明显,当KEY值是非连续的,离散的时候,创建分区表比较适合采用列表分区。
3)哈希分区
哈希分区就是分区规则将分区创建的KEY根据内部的哈希运算结果然后映射到相应的分区中去。具体的映射关系为,插入数据的KEY值在进行哈希运算等算法后会返回一个序号值,然后拿该序号值和创建分区时给分区分配的序号值比较,相等则插入相应的分区。
哈希分区的KEY目前仅支持一个字段。HASH分区适用于无法有效划分分区范围,即不适用于范围分区和列表分区的场景,比如由很长的字符串组成的ID号,并且查询时以ID做为查询条件之一,那么此时就比较合适对其进行哈希分区。哈希分区还有一个用途就是起到对数据进行平均分配到各个分区中的效果,特别是在大数据量且KEY值没有重复的情况下。
4)分区表的系统表
事实上,分区表中的每个分区都是以表对象的形式存在,其表结构是完全继承自分区表的主表。分区表中的分区信息可以从系统表pg_partitioned_table和pg_class查看。系统表pg_partitioned_table用于记录分区表主表信息,具体参照系统表pg_partitioned_table。系统表pg_class用于记录分区表子分区信息,pg_class有字段值relispartition,relpartbound用于标识分区类型。
2.2 分区表创建
1)范围分区:HGDB的分区表在建表语法上,主表和分区是单独创建的。下面的列表分区、哈希分区也是一样。
创建主表语法:
CREATE TABLE 主表名 ( [{ 列名称 数据_类型} [, ... ] ] ) PARTITION BY RANGE ( [{ 列名称 } [, ...] ] );
范围分区的KEY值可由多个字段组成(最多32个字段)。
创建分区表语法:
CREATE TABLE 分区表名 PARTITION OF 主表 FOR VALUES FROM{ ( 表达式 [, ...] ) | MINVALUE } [, ...] TO { ( 表达式 [, ...] ) | MAXVALUE } [, ...] [ TABLESPACE 表空间名 ];
更多详细信息请登录【瀚高技术支持平台】查看https://support.highgo.com/#/index/docContentHighgo/20731de002465e4c