对比总结
创建分区表意义
1、提高检索效率,只需要访问某个分区数据,而不需要遍历全部数据,分区可以分散在不同的磁盘
2、减少运维成本,只需要对有数据变更的分区进行维护
3、增强表可用性,某个分区表出现问题,不影响整表的访问
4、增加运维灵活性,可以对历史分区单独处理
分区定义
PostgreSQL
10.0之前:通过inherit方式 或 插件 来实现
10.0 添加partition 语法,支持范围和列表分区
11.0 增加了default 分区,支持hash分区,支持并行创建分区索引
13.0 支持row_level 触发器,支持分区表的逻辑订阅发布
MogDB/openGauss
行存表支持范围分区、间隔分区、哈希分区、列表分区
列存表仅支持范围分区
间隔分区是特殊的范围分区,支持自增分区
分区类型-范围分区
PostgreSQL
范围分区是根据表的一列或者多列,将要插入表的记录分为若干个范围,这些范围在不同的分区里 没有重叠。为每个范围创建一个分区,用来存储相应的数据。
MogDB/openGauss
VALUES LESS THAN语法格式,分区键最多支持4列
START END语法格式,分区键仅支持1列)
间隔分区,分区键仅支持1列,仅支持时间类型
分区类型-哈希/列表分区
哈希分区:通过为每个分区指定模数和余数来对表进行分区,每个分区所持有的行都满足:分区键的值除以为其指定的模数将产生为其指定的余数。
列表分区:通过显式地列出每一个分区中出现的键值来划分表。
PostgreSQL
哈希
列表
MogDB/openGauss
哈希分区策略的分区键仅支持1列,分区个数不能超过64。
列表分区策略的分区键仅支持1列,分区/键值数不能超过64。
哈希
列表
分区索引
PostgreSQL分区表索引的使用方式与普通索引没有区别,支持在单个分区上创建索引。
MogDB/openGauss分区索引分为两种:全局(global)索引和本地(local)索引。
MogDB/openGauss默认索引是全局索引,创建本地索引需要指定local,且分区表创建索引不支持concurrently语法。
MogDB/openGauss分区索引
1、添加/删除分区不影响本地索引使用。
2、添加分区不影响全局索引使用,默认删除分区方式,全局索引失效,需要对全局索引重建。
3、 update global index方式删除分区,不影响全局索引使用
连接参考: https://www.modb.pro/db/48856
添加/卸载分区
PostgreSQL
1、Create table partition of 方式添加
2、创建一个与父表表结构相同的普通表,然后使用attach partition命令方式
1、detach partition 语法
MogDB/openGauss
1、使用add partition语法
1、drop partition 语法
注意
1、PG卸载分区,将分区转换成普通表,数据还保留。
2、MogDB/openGauss drop 分区是真实的将分区和数据删除。
合并/切割/置换分区
PostgreSQL数据库不支持分区表的合并、切割及数据置换操作。
置换是将普通表与分区的数据置换,达到转移数据的目的,通常是在删除分区前执行。
合并是将多个分区做整合
拆分是将一个分区拆分多个子分区