mysql自增id与uuid的区别

本文探讨了在MySQL数据库设计中自增ID与UUID作为主键的区别。自增ID能够提高存储效率,减少页分裂和碎片产生,适合用作主键;UUID能确保全局唯一性,适用于逻辑主键,但可能导致大量IO压力。

前言

在设计数据库表的时候,MySQL官方推荐不要使用uuid或者不重复不连续的雪花id(long型且id唯一,单机递增),而是腿甲使用自增id,推荐使用auto_increment

自增id做主键

在设计数据库表时,自增id 通过auto_increment,id依次递增,一般来说插入的id为上一个id值加1。

  • 使用自增id,如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引、如果没有显式定义主键,则InnoDB会选择第一个不包含NULL值的唯一索引作为主键索引、如果也没有这样的值作为主键索引,则InnoDB会选择设置内置6字节长的ROWID作为隐含的聚集索引(ROWID随着航记录的写入设置逐渐递增)
  • 记录本身存放在主索引(一颗B+tree)的叶子节点上。这就需要同一个叶子节点内(大小为一个内存页或者磁盘页)的各个记录按照主键顺序存放,每当一天记录插入时,MySQL会根据其主键将其插入当前适当的节点位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟为一个新的页
  • 使用主键自增,每次插入一条新的记录,记录就会沿着当前索引节点的后续位置,当一页写满,就会开辟一个新的页
  • 减少了叶分裂和碎片的产生
  • 自增id主键可能不连续,造成不连续的情况可能有:
    • 唯一主键冲突
    • 事务回滚
    • insert…select语句批量申请自增id

UUID做主键

UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heromps

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值