本文介绍了分区表的定义及优势。

PolarDB-X的AUTO模式数据库中,将数据量较大的逻辑表依据特定的分区规则切割成若干个较小的物理表,此时大的逻辑表称为分区表,每个小的物理表称作为分区表的一个分区。PolarDB-X提供了一系列灵活的分区策略,包括KEY、HASH、RANGE、LIST和COHASH,这些规则还可以灵活组合,形成二级分区策略。这样的设计不仅实现了数据的高效管理,也使得分区策略与MySQL的分区语法保持了高度的兼容性,为用户提供了便捷和熟悉的操作体验。

PolarDB-X还为分区表提供了一系列便捷的运维管理能力,包括支持分区的分裂、合并、迁移调度等功能。能够实现灵活的数据管理,例如可以将特定分区的数据隔离至独立的存储节点,或将较大的分区细分为多个小的分区等,提升数据处理的灵活性和效率。

优势

  • 支持RANGE、RANGE COLUMN、KEY、LIST、LIST COLUMN和COHASH分区及其分区的任意组合二级模板化分区或者二级非模板化分区,使得分区表具有更加灵活的数据分治能力。

  • 支持在分区表上创建全局二级索引(Global Secondary Index),更好地满足对分区表进行不同维度查询的索引要求。

  • 支持分区剪枝(Partition Pruning),在查询数据时,优化器会根据查询条件和分区元数据自动过滤不符合条件的分区,减少数据扫描。

  • 分区连接(PartitionWise Joins),在连接分区时,根据分区条件将分区表打散成分区与分区之间的连接,过滤不符合条件的分区之间的连接,把连接的数据控制在最小范围内,提高查询效率。

  • 支持并行查询加速,为基于分区的大表方案提供成倍的性能提升。

  • 支持灵活的分区调度管理,方便对不同分区数据进行隔离。

与MySQL分区表的差异

对比项

PolarDB-X分区表

MySQL分区表

分区分布位置

不同分区自动分布到不同的数据节点,实现单机资源的突破

所有分区必须在主节点,共享单机资源。

支持分区策略

  • HASH/KEY

  • RANGE/RANGE COLUMNS

  • LIST/LIST COLUMNS

  • CO_HASH(PolarDB-X特有的分区策略)

  • HASH/KEY

  • RANGE/RANGE COLUMNS

  • LIST/LIST COLUMNS

支持分区函数

(详细请参见分区函数

HAHS/RANGE/LIST 支持使用函数表达式进行定义,其中

与 MySQL 兼容的分区函数如下

  • YEAR

  • MONTH

  • TO_DAYS

  • TO_SECONDS

  • UNIX_TIMESTAMP

  • DAYOFWEEK

  • DAYOFMONTH

  • DAYOFYEAR

PolarDB-X特有的分区函数

  • TO_MONTHS

  • TO_WEEKS

  • SUBSTR/SUBSTRING(标准的MySQL函数,详情请参见MySQL SUBSTR

  • RIGHT(标准的MySQL函数,详情请参见MySQL RIGHT

  • LEFT(标准的MySQL函数,详情请参见MySQL LEFT

HAHS/RANGE/LIST 支持使用分函数表达式进行定义,其中 MySQL 分区表所允许使用的分区列的函数表达式,请参考

MySQL分区函数列表

MySQL分区表不支持使用字符类型输入的分区函数,例如:

  • SUBSTR

  • SUBSTRING

  • RIGHT

  • LEFT

哈希分区策略

HASH

  • 使用一致性哈希路由算法。

  • 支持向量分区列,例如Partition By Hash(a,b),详情请参见HASH分区

  • 使用哈希取模的路由算法。

  • 不支持向量分区列,例如:Partition By Hash(a,b)。

KEY

  • 使用一致性哈希路由算法。

  • 支持向量分区列(默认第1个列参与路由计算),详情请参见KEY分区

  • 支持热点散列。

  • 支持前缀分区列等值条件的分区裁剪。

  • 使用哈希取模的路由算法。

  • 支持使用向量分区列(所有列同时参与路由计算)。

  • 无法热点散列。

  • 不支持前缀分区列等值条件的分区裁剪,必须携带所有有分区列的等值条件才能分区裁剪。

CO_HASH

  • PolarDB-X的特有分区策略,详情请参见CO_HASH分区

  • 支持同时按两个或多个分区列进行水平分区

  • 各个分区列等值查询均支持分区裁剪

范围分区策略

RANGE

支持使用字符类型的分区函数,例如right/left/substr。详情请参见RANGE分区

不支持使用字符类型的分区函数,例如right/left/substr。

RANGE COLUMNS

默认最多允许5个分区列进行分区定义,可调整参数。详情请参见RANGE COLUMNS分区

分区列数目不限制。

列表分区策略

LIST

  • 支持定义Default分区。

  • 支持字符类型的分区列。

  • 支持使用字符类型的分区函数,比如,RIGHT/LEFT/SUBSTR。

  • 支持单独对List分区值的集合进行修改。

  • 详情请参见LIST分区

  • 不支持定义Default分区。

  • 不支持字符类型的分区列。

  • 不支持使用字符类型的分区函数,例如RIGHT/LEFT/SUBSTR。

  • 无法对单个List分区值的集合进行修改。

LIST COLUNNS

  • 支持定义Default分区。

  • 支持单独对List Columns分区值的集合进行修改。

  • 详情请参见LIST COLUMNS分区

  • 不支持定义Default分区。

  • 无法对单个List Columns分区值的集合进行修改。

二级分区

组合策略

一级分区策略(7种)与二级分区策略(7种)的组合完全正交,组合分区策略数目达到49种。

  • Hash/Key分区策略不允许定义二级分区。

  • Range/RangeColumns/List/List Columns共4种分区策略允许定义二级分区,但二级分区策略必须是Hash/Key。

  • 组合分区策略数目是8种。

模板化与非模板化

所有组合策略均支持模板化二级分区与非模板化二级分区两种用法,详情请参见二级分区

  • 所有组合策略只支持模板化二级分区的用法。

  • 不支持非模板化二级分区。

二级分区位置分布

  • 支持分区级Locality。

  • 允许通过指定二级分区的Locality的定义,以控制单个二级分区的物理位置的分布。

  • 允许通过指定一级分区的Locality定义,统一控制各一级分区之下的二级分区的物理位置的分布。例如可以让同一个一级分区下的二级分区都分布在同一个数据节点等等。

不支持分区级Locality

分区级变更

  • PolarDB-X分区表(含二级分区)支持以下的分区定义的变更操作:

    • 分裂分区

    • 合并分区

    • 迁移分区

    • 增加分区

    • 删除分区

    • 修改分区

    • 重组分区

    • 清空分区

    • 重命名分区

  • 所有分区运维变更均是Online DDL,不会锁表。

MySQL分区表支持以下分区定义的变更操作:

  • 合并分区

  • 重组分区

  • 增加分区

  • 删除分区

  • 清空分区

  • 交换分区

大部分的分区级变更均需要锁表。

分区表重定义

  • 支持将分区表与单表、广播表之间进行Online互换(需迁移数据)。

  • 分区表重定义操作是Online DDL,不会锁表。

  • 可通过Remove Partitioning实现分区表与原单表的切换。

  • 分区表重定义过程需要锁表。

分区列约束

PolarDB-X分区表不要求主键、唯一键必须包含所有的分区列(包含一级分区与二级分区)。

MySQL分区表要求主键、唯一键必须包含所有的分区列(包含一级分区与二级分区)。

全局索引

  • 支持全局索引表使用分区表定义。

  • 支持对全局索引表的分区进行单独运维变更。

没有全局索引。