使用雪花id或uuid作为Mysql主键,被老板怼了一顿!

推荐:一:mysql和程序实例 1.1:为解答此问题,我们构建了三张表:user_auto_key, user_uuid, user_random_key。每张表的主键采用不同的生成策略,其余字段保持一致,以控制变量法测试表的插入速度和查询效率。这里的随机key指的是使用雪花算法生成的、前后不连续、不重复、无规律的ID,长度为18位的...
使用雪花id或uuid作为Mysql主键,被老板怼了一顿!
推荐:一:mysql和程序实例

1.1:为解答此问题,我们构建了三张表:user_auto_key, user_uuid, user_random_key。每张表的主键采用不同的生成策略,其余字段保持一致,以控制变量法测试表的插入速度和查询效率。这里的随机key指的是使用雪花算法生成的、前后不连续、不重复、无规律的ID,长度为18位的long值。

1.2:理论阐述后,直接上程序实践。利用spring的jdbcTemplate实现增查测试,采用springboot+jdbcTemplate+junit+hutool框架。程序在相同环境下生成同等数量的数据,通过插入10w数据分析效率。所有数据通过随机生成,确保真实效果。程序已上传至gitee,详情可见文底。

1.3:程序写入结果展示

1.4:效率测试结果分析

在已有130w数据量时,测试插入10w数据,发现uuid插入效率垫底。随着数据量增加至100w左右,uuid效率下降明显。效率排名为:auto_key > random_key > uuid。为何出现这种现象?带着疑问,我们接下来探讨。

二:使用uuid和自增ID的索引结构对比

2.1:自增ID的内部结构:自增值顺序存储,提升页面填充率,减少页分裂和碎片生成。新插入的行总是紧挨着已有最大数据行,定位快,减少额外消耗。

2.2:uuid索引的内部结构:因无规律性,新行位置需动态分配,导致大量额外操作。数据分布不均,增加页分裂,页分裂导致数据移动,插入效率低。

2.3:自增ID的缺点:暴露业务增长信息、并发插入导致锁争用、自增锁机制性能损失。优化需要调整innodb_autoinc_lock_mode配置。

使用innodb时,应按照主键自增顺序插入,并尽可能使用单调递增的聚簇键值。

三:总结

本文从提出问题、建表至使用jdbcTemplate测试不同ID生成策略,深入分析ID机制在mysql索引结构中的表现及其优缺点。详细解释了uuid和随机不重复ID在数据插入中的性能损耗,强调在实际开发中,遵循mysql官方推荐使用自增ID。mysql内部优化点众多,值得深入学习。2024-11-03
mengvlog 阅读 7 次 更新于 2025-07-21 03:42:32 我来答关注问题0
  •  翡希信息咨询 【MySQL】mysql中不推荐使用uuid或者雪花id作为主键的原因以及差异化对比

    不推荐使用雪花ID作为主键的原因: 依赖机器时钟:雪花ID的生成依赖机器时钟,如果机器时钟出现问题,可能导致生成的ID不唯一。 存储空间占用同样较大:虽然雪花ID比UUID短,但相比自增ID,其存储空间占用仍然较大。自增ID与UUID、雪花ID的差异化对比: 生成与管理:自增ID由数据库自动管理,生成简单且唯...

  •  翡希信息咨询 用雪花 id 和 uuid 做 MySQL 主键,被领导怼了

    在MySQL中,使用雪花ID和UUID作为主键确实不是最佳选择,推荐使用自动增长的主键id。原因如下:性能问题:插入速度:UUID的随机性导致数据分布不规律,增加了数据操作的复杂性,尤其是在数据量大时,对数据库性能影响显著。测试显示,自动增长的主键在插入速度和效率上明显优于使用UUID。查询效率:自动增长id...

  • UUID和雪花算法在生成时并非递增序列,在未进行分库分表的情况下使用它们作为数据库主键可能导致MySQL的页分裂问题和磁盘的随机读问题。然而,雪花算法在分布式数据库中作为主键是主流实现方案。我们需要了解分布式ID的原因是,当系统数据量过大并已完成分库分表后,需要对分散在各个库表中的数据记录进行唯一...

  • 在 MySQL 中设计表时,官方推荐使用自动增长的主键 ID 而非 UUID 或雪花 ID。本文将探讨为何不建议使用 UUID,并分析使用 UUID 的数据库性能问题。本篇博客将使用控制变量法,通过建立多张表(user_auto_key、user_uuid、user_random_key)并测试它们的插入速度和查询速度。表的区别仅在于主键生成策略...

  • 在mysql中可以把UUID作为逻辑主键,物理主键依然使用自增ID 1、UUID定义 UUID含义是通用唯一识别码 (Universally Unique Identifier),这 是一个软件建构的标准,也是被开源软件基金会 (Open Software Foundation, OSF) 的组织应用在分布式计算环境 (Distributed Computing Environment, DCE) 领域的一部分。

檬味博客在线解答立即免费咨询

mySQL相关话题

Copyright © 2023 WWW.MENGVLOG.COM - 檬味博客
返回顶部