mysql 主键用自增 id 还是雪花 id?

2020 年 8 月 11 日
 Vimax

InnoDB 表的数据写入顺序能和 B+树索引的叶子节点顺序一致的话,这时候存取效率是最高的。

在数据表中,什么场景适合用主键 ID,什么场景适合雪花 ID ?

8253 次点击
所在节点    MySQL
25 条回复
lenqu
2020 年 8 月 11 日
个人观点,如果表数据不存在整列删除情况,主键 id 就很合适
wellsc
2020 年 8 月 11 日
雪花也可以自增的
ifsclimbing
2020 年 8 月 11 日
分库分表用 雪花 id 吧
opengps
2020 年 8 月 11 日
怕爬虫规律性穷举的一定不能用自增 id
damai0419
2020 年 8 月 11 日
雪花是递增趋势. 不是严格递增的吧. 不分库分表,感觉没必要上分布式 id.
wangyzj
2020 年 8 月 11 日
业务量不是非常巨大,主键自增足够了
love
2020 年 8 月 11 日
egfegdfr
2020 年 8 月 11 日
看数据的重要性吧,一些非重要的数据就直接自增了(角色、权限), 重要数据用雪花 id (用户、产品、订单、 支付流水)
takemeaway
2020 年 8 月 11 日
@opengps 现在爬虫还用穷举?
@lenqu 删除也一样合适
qwerthhusn
2020 年 8 月 11 日
用雪花,返回 json 时还要处理下格式,不然 js 读到大数字然后精度不足导致数据不对。。。
PopRain
2020 年 8 月 11 日
数据库主键最大的问题是获取主键需要访问数据库,如果有主从表,比较麻烦
cameco
2020 年 8 月 11 日
目前采用主键自增+hashids 加密(就是处理麻烦了点其它目前无感)。
sunmoon1983
2020 年 8 月 11 日
@qwerthhusn 对,我曾经也被这个问题困扰了,用了 json-bigint 也不好使,没办法,只能在后台先把 bigint 转成字符串再返回给前端
EminemW
2020 年 8 月 11 日
一起用
littlewing
2020 年 8 月 12 日
主键自增+一个雪花 ID
yidinghe
2020 年 8 月 12 日
有需要 ID 严格递增的话就用自增
locoz
2020 年 8 月 12 日
这问题在前面这个帖子( https://v2ex.xtra.eu.org/t/686977 )里的文章和回复中有一堆例子,还有各种性能问题、部署问题之类的讨论,你可以看看。

@takemeaway #9 能按 ID 顺序爬当然直接穷举 ID 啊,数据又全又不需要管列表页,增量还方便...
xuanbg
2020 年 8 月 12 日
有条件当然不要用数据库自增。用自增有两个坏处:
1 、id 可猜测,不对,应该是可预测。简直是为别人爬数据大开方便之门。
2 、新增数据返回 id 还得额外费手脚,写主从数据时很恶心。
xuanbg
2020 年 8 月 12 日
@xuanbg 忘了说第三个,分表后 id 会重复……要死了
securityCoding
2020 年 8 月 12 日
@sunmoon1983 java 的话统一配置一下序列化策略就行了

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

https://v2ex.xtra.eu.org/t/697358

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

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

© 2021 V2EX