【概述】 场景 + 问题概述
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
表结构
【概述】 场景 + 问题概述
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
表结构
你需要将这个表改为 聚簇索引才行,有文档的
CLUSTERED
,表示该表的主键为聚簇索引。在聚簇索引表中,行数据的键由用户给定的主键列数据构成,因此聚簇索引表存储一行至少只要一个键值对,即
https://docs.pingcap.com/zh/tidb/stable/clustered-indexes
你可以另外订一个联合键,为 id + date,然后做为 分区键使用
UNIQUE KEY (id, date)
聚簇索引无法直接修改,需新建表设置auto_random 然后导入数据即可。
使用这2两打散热点或者导出数据后,新建clustered表再导入
聚簇表 无法使用shard 打散
我想着也是 只能重建了, 复合索引 系统 默认是聚簇索引,不知道后面官方有没有处理建议
和复合索引无关,只是因为是聚簇索引的结构导致的无法修改,这个需要等后续了
我是复合主键,不一样的
聚簇索引无法修改,新建表设置auto_random
不支持使用 ALTER TABLE 来修改 AUTO_RANDOM 属性。
但是在开启参数 tidb_allow_remove_auto_inc 时可以由 AUTO_INCRMENT
改为 AUTO_RANDOM
,前提是表为聚簇表
,非聚簇表无法修改。详见《关于auto_random的几个知识点》
该主题在最后一个回复创建后60天后自动关闭。不再允许新的回复。