PolarDB-X中,把数据按照一致性哈希算法打散到不同的分区上,支持使用分区函数的表达式对分区列的值进行处理的分区策略叫做HASH分区。
PolarDB-X的HASH分区的路由算法与社区MySQL的HASH分区的路由算法并不相同。
CREATE TABLE ... PARTITION BY HASH(partition_expr) PARTITIONS number; partition_expr: partition_column_list | partition_func(partition_column) partition_column_list: partition_column_list[, partition_column, partition_column, ...] # 分区函数定义 partition_func: YEAR | TO_DAYS | TO_MONTHS | TO_WEEKS | TO_SECOND | UNIX_TIMESTAMP | MONTH | DAYOFWEEK | DAYOFMONTH | DAYOFYEAR | SUBSTR | SUBSTRING | RIGHT | LEFT说明
HASH分区策略与KEY分区策略的区别请参见。
限制HASH分区的单列分区键支持使用分区函数,但不同分区函数对分区列的数据类型有不同要求。
HASH分区的向量分区键不允许使用分区函数,不支持热点分列。
分区列使用分区函数时,不允许嵌套多层的分区函数。
默认最大分区数目不允许超过8192。
默认最大分区列数目不允许超过5个。
使用TIMESTAMP等时区敏感的数据类型作为分区列时,该分区列必须配套地使用UNIX_TIMESTAMP分区函数。
示例 使用分区函数使用单列分区键datetime并通过分区函数to_days将datetime时间列转换为日期天数,再进行哈希分区,同时指定分区数目为8。
CREATE TABLE tb_h_fn( id bigint not null auto_increment, bid int, name varchar(30), birthday datetime not null, primary key(id) ) PARTITION BY HASH(TO_DAYS(birthday)) PARTITIONS 8;使用单列分区键使用单列分区键id进行哈希分区,并指定分区数目为8。
CREATE TABLE tb_h( id bigint not null auto_increment, bid int, name varchar(30), birthday datetime not null, primary key(id) ) PARTITION BY HASH(id) PARTITIONS 8;使用向量分区键使用向量分区键 (id,bid) 进行哈希分区,并指定分区数目为8。
重要
id与bid同时参与哈希值计算,即等值查询必须同时带上id与bid等值条件,才能命中分区裁剪。
CREATE TABLE tb_h2( id bigint not null auto_increment, bid int, name varchar(30), birthday datetime not null, primary key(id) ) PARTITION BY HASH(id,bid) PARTITIONS 8;相关限制数据类型限制整数类型: BIGINT/BIGINT UNSINGEDINT/INT/INT UNSINGED/MEDIUMINT/MEDIUMINT UNSINGED/SMALLINT/SMALLINT UNSINGED/TINYINT/TINYINT UNSINGED