数据库自增主键可能的问题

本文探讨了数据库自增主键的几种方式,包括时间戳+随机数、取最大值+1和单独建主键表的优缺点。在并发、性能和移植性之间寻找平衡,指出MySQL自增ID的优势与并发插入时的锁问题。同时,提出了自定义全局递增整数和使用UUID作为主键的权衡。作者分享了自己的技术背景和一份全面的Java开发学习资料,旨在帮助开发者提升技能。
摘要由CSDN通过智能技术生成

2、使用时间戳+随机数

优点:实现简单,与数据库无关,移植性较好

缺点:长度太长,最少也得20位,不仅占空间并且建索引的话性能会比较差点吧

3、每次取主键最大值+1做为新的主键

优点 :主键长度可控,移植性较好

缺点:并发写可能会造成主键冲突,对并发也不太好控制

4、单独建一个存放主键的表

优点:实现简单,移植性较好

缺点:需要考虑并发问题,整个系统主键生成都依赖该表,性能影响可能较大

即要做到移植性好,性能好,又不会出现并发问题,似乎是没有完美的方案了吗?

一、对于MySQL来说,使用自增还是比较划算的,因为索引使用的底层数据结构(B+树)的原因,如果是自增ID的话,那么数据插入时最多就是引起节点的分裂,而如果是使用非自增ID,则有可能会导致节点移动和分裂。

二、如果使用MySQL又使用UUID作为主键的话,那么插入效率必然大幅下降。

1、当然,使用自增也会带来问题,就是日后如果要做水平切分的话,那么有可能会产生冲突的主键。

2、 而且并发插入的量比较大的时候,MySQL 中如果有自增字段的话,MySQL 会维护一个自增锁,InnoDB 表引擎会在内存里保存一个计数器来记录 AU

  • 15
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值