概述

与MySQL二级分区类似,PolarDB-X支持使用二级分区语法创建含二级分区的分区表。所谓二级分区,就是允许对所有一级分区按指定分区列及分区策略继续进行二次分区。

因此,使用了二级分区定义的分区表,有以下特性:

  • 它的每个一级分区实际变成一个逻辑分区,对应着一组二级分区的集合;

  • 它的每个二级分区实际变成一个物理分区,对应着DN节点上的一个具体的物理分表。

一级分区与二级分区完全正交

PolarDB-X的一级分区与二级分区均支持使用以下的7种的分区策略:

因此,PolarDB-X的一级分区与二级分区是完全正交的组合关系,即支持使用任意两种分区策略进行组合,组合分区的数目多达49种。

模板化与非模板化

PolarDB-X二级分区分可为两大类用法:模板化二级分区与非模板化二级分区。

PolarDB-X二级分区的49种的组合分区,任意一种组合分区均支持使用模板化定义与非模板化定义两种不同的用法。

模板化二级分区

模板化二级分区,是指各个一级分区之下的二级分区的分区数目及其分区边界值始终一致。示例如下:

/*
 * 定义LIST-KEY的模板化子分区,
 * 一级分区按 LIST COLUMNS 分为3个分区,
 * 每个一级分区继续按 KEY 策略分为4个二级分区,
 * 因此,总共会有 12个 物理分区
*/
CREATE TABLE sp_tbl_list_key_tp(
 id int, 
 country varchar(64),
 city varchar(64),
 order_time datetime not null,
 PRIMARY KEY(id)
)
PARTITION BY LIST COLUMNS(country,city) 
SUBPARTITION BY KEY(id) SUBPARTITIONS 4
(
  PARTITION p1 VALUES IN (('China','Hangzhou')),
  PARTITION p2 VALUES IN (('Russian','Moscow')),
  PARTITION pd VALUES IN (DEFAULT)
);

非模板化二级分区

非模板化二级分区,就是指各个一级分区之下的二级分区的分区数目及其分区边界值允许不一致。示例如下:

/*
 * 定义LIST-KEY的非模板化子分区,
 * 一级分区按 LIST COLUMNS 分为3个分区,
 * 每个一级分区继续按 KEY 策略进行二级分区,
 * 各一级分区的二级分区数目分别定义为 2,3,4,
 * 因此,总共会有 9 个 物理分区
*/
CREATE TABLE sp_tbl_list_key_ntp(
 id int, 
 country varchar(64),
 city varchar(64),
 order_time datetime not null,
 PRIMARY KEY(id)
)
PARTITION BY LIST COLUMNS(country,city) 
SUBPARTITION BY KEY(id)
(
  PARTITION p1 VALUES IN (('China','Hangzhou')) SUBPARTITIONS 2,
  PARTITION p2 VALUES IN (('Russian','Moscow')) SUBPARTITIONS 3,
  PARTITION pd VALUES IN (DEFAULT) SUBPARTITIONS 4
);

版本说明

如需要使用二级分区的相关功能,请务必将实例版本升级到5.4.17-16952556及以上版本。