分区表-主键和唯一索引必须包含分区字段,主键需要使用id+分区字段, 请问下id如何使用auto_random呢

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【 TiDB 使用环境】

【概述】 场景 + 问题概述
分区表-主键和唯一索引必须包含分区字段,主键需要使用id+分区字段, 请问下id如何使用auto_random呢

DDL:

CREATE TABLE business_bill_by_partition (
id bigint(20) NOT NULL AUTO_RANDOM ,
data_business_time datetime(3) NOT NULL COMMENT ‘业务时间’,
data_business_date DATE AS (DATE( data_business_time)) STORED NOT NULL COMMENT ‘业务日期’,
data_business_month int AS (DATE_FORMAT(data_business_time, ‘%Y%m’)) STORED NOT NULL COMMENT ‘业务年月’,
PRIMARY KEY CLUSTERED(id, data_business_month)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT=‘xxxx’
Partition BY RANGE(data_business_month) (
PARTITION p202106 VALUES LESS THAN (202106),
PARTITION p202107 VALUES LESS THAN (202107),
PARTITION p202108 VALUES LESS THAN (202108),
PARTITION p202109 VALUES LESS THAN (202109)
);

【问题】 当前遇到的问题
分区表-主键和唯一索引必须包含分区字段,主键需要使用id+分区字段, 请问下id如何使用auto_random呢

错误提示:Invalid auto random: column id is not the integer primary key, or table is created with alter-primary-key enabled
【业务影响】
分区表情况下无法使用auto_random
【TiDB 版本】
4.0.3

这个是看到了的。 如果使用分区表就无法使用auto_random来解决写入热点问题了。 又需要对auto_random寻找替代方案

考虑下hash分区

分区表是联合主键,所以可以通过 SHARD_ROW_ID_BITS 以及 presplit 来对表数据进行打散热点。

1赞