在 Mysql 中, 主键应该使用自增还是 uuid ?

在 Mysql 中 ,常见用于主键有数据有两种 。第一种是使用 MySQL 的自增主键 ,第二种则是使用业务字段 ,例如身份证或者 uuid 这样的无序信息 。

那么这两种 id 哪一种比较好 ,我们在新建一张表的时候该怎么考虑主键的使用 ,今天就来好好的研究一下 。

首先给出结论 ,在大部分情况下我们都推荐使用自增 id 作为主键,至于原因 ,那就要从 MySQL 的索引结构开始说起 。

以最常见的 InnoDB 为例 , 在 InnoDB 中 ,索引是以 B+ 树结构进行存储的 。我们每次在往数据表中插入字段时 ,MySQL 就会自动的维护主键索引 ,向索引 B+ 树中插入我们新增的数据 。

如果我们使用的是无序的业务数据的话 ,也就意味着我们需要经常往索引的中间加数据 ,需要对大量的数据进行移动处理 ,从而空出新的索引需要的位置 。这就会影响插入的效率 。在最糟糕的情况下 ,我们需要向一个已经满了的数据页中插入我们的索引数据 ,这就需要申请一个新的数据页 ,再将部分数据放到新数据页中 ,这个过程被称之为页分裂 。而且除了性能问题外 ,页分裂也会导致页的空间利用率降低 。

这时候我们再来看使用自增索引的情况 ,当我们使用自增索引的时候 ,所有的新增数据都是有序的 ,新的索引只需要追加在索引的尾端即可 ,快速便捷 ,上面提到的问题就都没有了 。

当我们使用自增主键的时候 ,我们在业务上可以不再操心主键的赋值和重复等问题 ,系统会自动获取当前 id 的最大值加一来作为新纪录的主键 。而且大部分情况下 ,自增主键使用整形的话只需要 4 个字节 ,使用业务数据或者 uuid 所占据的空间则会大得多 。

所以除非业务有特殊需要, 例如为了防止业务量通过 id 暴露这样的情况 ,在大部分情况下 ,我们使用自增主键会好很多 。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值