主键如何设计

1.自增id左主键

1)可靠性不高
存在自增id回溯的问题,mysql8.0修复
自增id回溯:
在这里插入图片描述
2)安全性不高
可以容易猜测用户id的值
3)性能差
自增id的性能较差,需要在数据库服务端生成
4)交互多
客户端需要执行额外一次类似last_insert_id的函数才能知道刚才插入的自增值,这需要多一次的网络交互,在海量并发的系统中,多1条sql,性能开销就会增加
5)局部唯一性
自增id时局部唯一,旨在当前数据库实例中唯一,而不是全局唯一,对于分布式系统难以处理

2.业务字段做主键

表数据:
在这里插入图片描述
使用卡号作为主键,卡号可能重复使用,不能作为主键使用
使用身份证号作为主键,比较合理,但身份证号不一定可以获取
结论:
使用业务作为主键时,想当然的认为了解业务需求,但实际情况往往出乎意料,而更改主键设置的成本非常高

3.淘宝主键设计

订单id = 时间+去重字段+用户id后六位

4.推荐的主键设计

非核心业务:对应表的主键自增id,如告警,日志,监控等
核心业务:主键设计保证:全局唯一+单调递增
推荐使用UUID:全局唯一,占用36字节,数据无序,插入性能差

UUID = 时间-UUID版本(16字节)-时钟序列(4字节)-MAC地址(12字节)

在这里插入图片描述

其中-占4个字节
改造UUID:时间高低位互换,则时间就是单调自增的了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值