分区键与主键

分区字段,有限制的

分区键,主键和唯一键

本节讨论分区键,主键和唯一键之间的关系。一句话总结它们之间的关系要满足的规则: 分区表的每个唯一键,必须包含分区表达式中用到的所有列

every unique key on the table must use every column in the table’s partitioning expression.

这个限制可以参考 mysql 的案例:https://www.cnblogs.com/zhishan/p/3285055.html

如果需要满足这种场景,id 值不重复就可以了,就不需要考虑限制插入了
CREATE TABLE table_name_hash (
id bigint(20) NOT NULL AUTO_INCREMENT COMMENT ‘主键’,
device_id varchar(100) DEFAULT NULL COMMENT ‘xxxxx’,
hc_deviceid bigint(20) NOT NULL DEFAULT ‘1’ COMMENT ‘device_id 的 hashcode’,
…这里省略了部分字段
PRIMARY KEY (id,hc_deviceid),
…这里省略了部分索引
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin SHARD_ROW_ID_BITS=4 AUTO_INCREMENT=8033064588 COMMENT=‘用户行为历史表’
PARTITION BY HASH( hc_deviceid )
PARTITIONS 30;

案例实践:https://asktug.com/t/topic/33810

还有一种方案:
id为主键,建立 id 和 time 为唯一的联合索引,也可以满足分区建立的场景

综上所述,不论是联合主键,还是联合唯一键都能满足建立分区的需求