Mysql表用自增主键的选型

本文对比了InnoDB引擎下自增ID与UUID作为主键的性能表现及存储效率,详细分析了不同场景下的优劣,并给出了针对单节点与分布式架构的最佳实践建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 版本说明

基于mysql版本:5.6.27

mysql数据库引擎:InnoDb

2. 说明

InnoDb的索引特性,导致的自增id做主键是效率最高的。

  • 存储上自增id占用的存储空间比uui小。
    • InnoDb在存在主键的情况下,使用主键建立聚簇索引,InnoDb的聚簇索引建立的B+树节点,索引和数据在一起(对应的数据为主键内容),通过节点中存储的主键进行关联行数据信息而二级索引信息。
    • uuid占用空间比自增主键大,会导致建立的索引占用空间大,检索慢。
  • 在存储和检索的时候,InnoDb会对主键进行物理排序
    • 自增主键后插入的主键位置总是在最后。
    • uuid是随机生成的,每次插入的主键位置是不确定的,会进行主键的物理排序,会造成大量的IO操作,从而影响数据库效率。
    • uuid在数据大量插入的时候,读写性能下降非常厉害。同时因为数据的物理重新排序,会生成大量的磁盘碎片,占用磁盘空间。

3. 场景选型

  • 单节点情况下,主键生成策略首选自增ID,性能高于uuid,磁盘占用少。
  • 分布式架构场景,可以在购买较多存储、降低部分性能的基础上,使用uuid。从而减少主键的生成成本(存在多个分布式写库的时候,使用自增主键的情况下,为了避免多个库之间主键生成重复,将耗费大量的技术成本)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值