05_greenplum定义数据库对象_分区
一、分区
概念(提高性能)

1、表分区

2、分区示意图

注:三个分区,九个子分区
3、数据分布&分区

4、全表扫描VS分区扫描

注:全表扫描:会对全部segment全部数据扫描;
分区扫描:会找到segment下的子分区,通过子分区就可以找到数据;
5、决定表的分区策略

6、创建分区表(优化)

注:对基表和堆表是不能创建分区的;
代码:
create table tb_cp_01(id int , date date, amt decimal(10,2)) distributed by (id)
partition by range(date) --指定分区为date字段
(
start (date '2022-01-01') inclusive --inclusive是包含的意思
end (date '2023-01-01') exclusive --exclusive是不包含意思,默认也是start包含,end不包含
every (interval '1 day') --一天产生一个分区,会产生356个分区
);
\d tb_cp_01
\d tb_cp_01_prt_10 --查看分区子表
(1)定义日期范围分区表

(2)定义数字范围分区表

注:EVERY(1)表示以1为增量,一个一个的增加;
(3)创建列表分区表

注:LIST指明是列表分区
(4)定义多级分区表

注:subpartition template为子分区模板,之后只需要添加主分区就可以自动创建子分区了

(5)分区表的限制
主键或者唯一约束必须包含表中的所有分区键;
7、装载分区表

8、验证分区策略

注:分区策略如果是合适的,我们在对分区键进行查询的时候会匹配到相关的分区;
9、分区选择性扫描策略

10、查看分区设计
(1)通过pg_partitions视图查看分区表设计情况

(2)如下视图也可以查看分区表的信息:

11、维护分区表
必须使用ALTER TABLE 命令从顶级表来维护分区;
(1)添加分区
使用ALTER TABLE 命令在存在的分区表上添加新分区。
1)原分区包含subpartition template设计:

注:ALTER TABLE tb_cp_05 DROP DEFAULT PARTITION;(因为已经存在默认分区了,所以需要删除默认分区,重新创建新的)
2)原分区不包含:

注:如果存在默认分区,只能从默认分区中拆分新的分区,如果有默认分区了ADD会失败;
12、维护分区表
(1)重命名分区·

1)修改父表名称,将会影响所有分区表


2)只修改分区名称

注:FOR关键字会帮助我们找到对应的分区;
(2)删除分区
使用ALTER TABLE 命令删除分区表中的分区。
1)删除默认分区

2)对于多级分区表,为同一层每一个分区删除默认分区

注:RANK(1)表示第一层分区;RANK(2)表示第二层分区;
(3)添加缺省分区
1)使用ALTER TABLE 命令添加默认分区:
ALTER TABLE tbcp05 ADD DEFAULT PARTITION other;
2)如果是多级分区表,同一层每个分区都需要默认分区:

13、清空分区数据
(1)清空分区数据
使用ALER TABLE 命令来清空分区:
ALTER TABLE tpcp05 TRUNCATE PARTITION FOR (RANK(1)) ;

浙公网安备 33010602011771号