是不是应该每个表都创建一个bigint 无意义的主键

【 TiDB 使用环境】生产环境
【 TiDB 版本】v7.1.0
是不是每个表都应该创建一个AUTO RANDOM 的主键?
我的业务中业务主键是一个UUID 格式的字符串,用业务主键还是用一个bigint 的AUTO RANDOM 主键?

1 个赞

这个表如果没有极致的写入性能需求,完全没有必要

在看官方文档谁大量写入的时候会出现热点问题,所以我每个表都创建了一个AUTO RANDOM 的ID,这个大量的写入是多少呢?

1 个赞

就一个普通民用SSD我测试用自增写入50000条记录每秒没问题,估计你也没这种需求

1 个赞

你把表建成聚簇索引表,然后把uuid列当主键就可以了,不会产生写热点的

2 个赞

tidb我的测试是SSD性能不太差,单表写入很吃cpu和内存资源,想提高速度反而是增加tidb节点性能,tikv加节点作用不大

1 个赞

AUTO RANDOM主键不适用于所有情况

1 个赞

请问如果是复合主键呢?

1 个赞

能请问什么情况不合适吗? 我有很多表是复合主键,这种情况怎么处理好些呢?

1 个赞

联合主键用的就是bigint隐藏自增列,是否有瓶颈我觉得还是压力测试下再看

1 个赞

个人感觉完全没必要,还是按照业务设置主键

看你建表用什么模型以及业务需要吧

不懂就问,请问这里的模型是指?
我之所以想用无意义的 id 是出于两个考虑

  1. 我很多表的主键都是符合主键,而且数量级很大比如十几亿,担心大量写入的时候造成热点
  2. 同样是十几亿几十亿的一个数据规模的表,我可能会创建三到四个索引,如果用业务主键 uuid 那么索引容量会占用过多

不知道这样考虑合不合理

联合主键并没有写入问题,聚簇表比非聚簇表写得快很多。
写入问题测试下你就知道和表上索引数量关系极大,加一个索引速度就掉很多。
在意写入速度就别加额外索引。

根据业务需要了

有业务需求和依赖自增做深层分页的可以用自增,其他原则上建议用random

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。