复合主键含auto_increment ,不能改为auto_random 吗

【概述】 场景 + 问题概述
auto_increment改为auto_random报错:
ERROR 8216 (HY000): Invalid auto random: auto_random can only be converted from auto_increment clustered primary key

【应用框架及开发适配业务逻辑】
业务大批量insert和update时,auto_increment主键字段有热点问题

【TiDB 版本】
5.2.2

表结构
image

1 个赞

你需要将这个表改为 聚簇索引才行,有文档的

  • CLUSTERED ,表示该表的主键为聚簇索引。在聚簇索引表中,行数据的键由用户给定的主键列数据构成,因此聚簇索引表存储一行至少只要一个键值对,即
    • 主键列数据(键) - 行数据(值)

https://docs.pingcap.com/zh/tidb/stable/clustered-indexes

你可以另外订一个联合键,为 id + date,然后做为 分区键使用

UNIQUE KEY (id, date)

聚簇索引无法直接修改,需新建表设置auto_random 然后导入数据即可。

2 个赞

image 使用这2两打散热点或者导出数据后,新建clustered表再导入

image
聚簇表 无法使用shard 打散

1 个赞

我想着也是 只能重建了, 复合索引 系统 默认是聚簇索引,不知道后面官方有没有处理建议

auto_increment改为auto_random报错 看到之前相同问题的帖子

1 个赞

和复合索引无关,只是因为是聚簇索引的结构导致的无法修改,这个需要等后续了

我是复合主键,不一样的

聚簇索引无法修改,新建表设置auto_random

不支持使用 ALTER TABLE 来修改 AUTO_RANDOM 属性。
但是在开启参数 tidb_allow_remove_auto_inc 时可以由 AUTO_INCRMENT 改为 AUTO_RANDOM,前提是表为聚簇表,非聚簇表无法修改。详见《关于auto_random的几个知识点》

该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。