uuid作为主键和自增主键的优缺点

本文比较了UUID作为主键和自增主键在保证唯一性、分表、查询效率、内存占用及分布式环境下的优缺点,强调了各自适用场景和潜在问题。
摘要由CSDN通过智能技术生成

前几天在面试的时候面试官问了我一个 uuid作为主键和自增主键的优缺点这个问题,面试的时候回答的并不好,不过面试结束后查询了很多资料的我给大家总结出来一些问题。

uuid作为主键

首先uuid 的全称叫做 :Universally Unique Identifier,是一种用于标识信息的128位数字,通常以32个十六进制数字的形式表示。UUID是一种全局唯一的标识符,用于确保在分布式系统中生成的标识符是唯一的,不会重复。UUID通常用于识别文档、消息、对象、实体等,以及在数据库、网络通信和其他系统中用于唯一标识实体的需求。UUID的生成算法保证了生成的标识符是唯一的,即使在不同的系统中生成也不会冲突。UUID的唯一性使其在大规模分布式系统中被广泛应用。

uuid 作为主键的优点:

1.作为主键保证了唯一性

2.在分表的时候大家基本上都会选用uuid或雪花算法作为主键,这样可以有效的避免了主键的冲突。

3.若使用uuid作为分表的分片键(当然一般不这么做),可以使数据在分表时更加平均地分布在不同的表中,有利于负载均衡。

uuid 作为主键的缺点

1.首先在innoDB引擎下,索引的底层是B+树,非叶子节点存储指针,只有叶子节点才会存储数据,一般主键也被叫做聚簇索引(索引值和数据是紧密相连的),如果使用uuid的话存储数据是无序的,这样查询效率会降低。

2.如果在中间页中插入新的数据或者是修改数据,因为uuid是无序的,因此可能会破坏底层B+树的结构,可能会发生页分裂这样就大幅度的增加了与硬盘的IO,同时也会出现数据碎片化,数据在物理存储上的布局不再连续,这会影响查询性能

3.由于现在的硬盘已经很便宜了,这里就简单说一下,uuid占用的内存要比较多,二级索引(非聚簇索引)会保存主键值(然后可能会进行回表查询等)这样一来就占用的空间比较多。

自增主键的优点

1.在单表中可以保证主键的唯一性,避免了数据的重复和冲突。

2.有数据库自己提供的,不需要程序员进行大幅度的干预。

3.提高查询和索引的性能。

4.节省空间,相比于uuid,它所占用的空间更少。

自增主键的缺点

1.在分布式系统或者分表的过程中可能会出现主键重复的问题,这样就会导致数据不一致。

2.容易暴露数据量,根据自增主键很容易判断出插入了多少数据。

3.限制扩展性:当需要将数据库扩展到多个节点或分片时,自增长字段可能会成为瓶颈,限制了数据库的扩展性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值