关于 MySQL 建表主键用自增还是 uuid 的问题

2021-12-13 10:19:48 +08:00
 daoqiongsi1101

关于 MySQL 建表主键 id 字段的类型,目前有这几种:

  1. 一个自增数字作为主键 id
  2. 一个无序的 uuid 作为 id
  3. 一个有序的 uuid 作为 id
  4. 一个业务 uuid (无序)作为 id ,一个自增字段 incr_id

InnoDB 引擎,主键 id 有序能利用其优势。

第 1 种,对于敏感的数据,容易根据 id 增长暴露增量;

第 2 种,没利用到 B+ Tree 的特性;

第 3 种,要引入 snowflake 等算法生成器;

第 4 种,其实是第 2 种的变体,加一个 incr_id 自增字段,在分页的时候用到

大家讨论一下,在 2021 年,那种主键 id 类型是推荐的?

6075 次点击
所在节点    MySQL
36 条回复
NBY
2021-12-13 14:57:54 +08:00
@Numbcoder 严重同意
PG 这么好用为啥不用 PG 呢
imnpc
2021-12-13 15:00:11 +08:00
建议使用自增 ID 然后 使用 hashid 对外输出和解密
niubee1
2021-12-13 15:27:14 +08:00
MySQL 用 uuid 有性能问题,最好是自增
whoosy
2021-12-13 15:27:57 +08:00
用自增 uuid
fangcan
2021-12-13 15:44:56 +08:00
用自增 id ,但是 id 不暴露可以么? 暴露业务 id
nigulasida
2021-12-13 16:22:57 +08:00
@Numbcoder 换乘 PG ,为什么主键就不需要考虑这个问题了呢?
可以用 uuid ?
nigulasida
2021-12-13 16:27:50 +08:00
@NBY

换成 PG ,为什么主键就不需要考虑这个问题了呢?
可以用 uuid ?
elboble
2021-12-13 16:35:16 +08:00
自增吧,mongo 要花力气才能做个自增的 id ,mysql 自带的还不用?
Jooooooooo
2021-12-13 16:55:36 +08:00
雪花是如此简单为啥不用呢.
nekoneko
2021-12-13 17:38:40 +08:00
id + uuid
后端逻辑用 id
前后端交互用 uuid
0x208
2021-12-13 18:46:48 +08:00
雪花目前用的挺舒服
codespots
2021-12-13 18:47:55 +08:00
@elboble 同意,用 MongoDB 的时候,一些场景比如用户 id 之类的,必须用类似自增 id 这样的 id ,就得费劲巴拉地区实现一个的时候,非常想念 mysql
zoharSoul
2021-12-13 19:05:30 +08:00
@onhao #9 败的一塌糊涂 什么意思?
Huelse
2021-12-13 20:04:43 +08:00
我们是主键自增 ID ,在系统内部关联查询等时也用这个 ID ,
给用户等外部查询时是 hashid 或 uuid ,系统内部不会去用
onhao
2021-12-13 23:09:49 +08:00
@zoharSoul 盗版采集 直接根据 ID 来采集我们最新的作品。
zhangyl
2021-12-14 10:14:11 +08:00
雪花,或者自增
雪花的话,如果和前端有交互,bigint 类型有失精问题(末尾几位会变成 0 ),可以改为字符串

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/821780

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX