MySQL 主键用自增好还是 UUID、雪花算法 ID 好?用自增+UUID 会不会好一点?

2021-07-30 15:14:25 +08:00
 polyang
我想的是一个表有两个基本字段 id 和 primary_key,id 是自增,且为主键; primary_key 为 UUID,是逻辑主键,表与表之间通过 primary_key 来关联,对前端也只暴露 primary_key 。
6726 次点击
所在节点    程序员
31 条回复
NXzCH8fP20468ML5
2021-07-31 08:53:18 +08:00
uuid_short 无符号自增长整形
唯一缺点就是作为默认值的话,需要 mysql8
offswitch
2021-07-31 08:59:08 +08:00
uuid 不要用,聚集索引有序,会引起频繁页分裂和页合并。
liuzhaowei55
2021-07-31 09:42:44 +08:00
主键用自增 id,业务用 random string 够用了,不放心的话入库前先查一下
Verizon
2021-07-31 10:23:26 +08:00
UUID 插入性能太差了 高性能 MYSQL 中有案例当表数据增长 到 300 万行时 UUID 比自增慢了 4 倍 而且索引占用空间是自增的 1.7 倍 具体原因跟 22 楼说的一样
chenqh
2021-07-31 14:02:40 +08:00
用 redis 写一个简单的带时间的自增 id 就好了
hushao
2021-07-31 14:12:26 +08:00
没特殊业务需求,一律自增。别的都是折腾
charlie21
2021-07-31 14:15:57 +08:00
如果是只用自增,如何用最简单的方式避免暴露数据
mreasonyang
2021-07-31 14:31:35 +08:00
非 C 端用自增就行了,C 端建议新项目伊始就用 Snowflake,不然后面体量大了想改就不容易了。UUID 方案如楼上所说没有任何优势所以就不要考虑了。

至于如何实现可靠的分布式 Snowflake 有很多轮子,推荐这款: https://github.com/Meituan-Dianping/Leaf
vanityfairn
2021-07-31 15:00:52 +08:00
为什么要用 uuid 折磨自己。。如果小业务,那也随意把?但是自增 id 不香么
honkki
2021-07-31 17:40:09 +08:00
@Rocketer 想请教一下雪花算法生成的 id 做主键 性能是不是比递增主键性能差呢 存在数据页分裂情况吗
xuanbg
2021-08-01 06:14:22 +08:00
@honkki 单调递增的效果和自增是一模一样的,整体而言,因为少了一次读操作,代码的效率更高。

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

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

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

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

© 2021 V2EX