专栏名称: Java知音
专注于Java,推送技术文章,热门开源项目等。致力打造一个有实用,有情怀的Java技术公众号!
今天看啥  ›  专栏  ›  Java知音

公司新来一个技术总监:禁止将 UUID 和雪花 ID 列入主键选型!

Java知音  · 公众号  · 设计 数据库  · 2025-03-21 10:05
    

主要观点总结

本文探讨了mysql中表主键id的选择问题,对比了uuid、自增id和雪花id等不同的主键生成策略,通过实例演示了不同策略在大数据量插入时的性能表现,并深入分析了不同主键策略在mysql索引结构中的优缺点。

关键观点总结

关键观点1: 问题提出与建表

文章首先提出问题,即mysql表主键选择uuid、自增id还是雪花id等策略。然后建立三张表分别使用不同的主键策略,为后续的性能测试做准备。

关键观点2: 性能测试与分析

通过jdbcTemplate进行大数据量的插入测试,发现uuid和随机不重复id在数据插入中的性能较差,主要原因是导致大量的随机IO和频繁的页分裂。

关键观点3: 索引结构对比

文章对比了使用自增id和uuid的索引结构,分析了各自在数据插入时的内部机制,以及可能遇到的问题。

关键观点4: 总结与建议

总结全文内容,强调在实际开发中根据mysql的官方推荐最好使用自增id,并指出其他值得优化的点。


文章预览

在 mysql 中设计表的时候,mysql 官方推荐不要使用 uuid 或者不连续不重复的雪花 id(long 形且唯一,单机递增),而是推荐连续自增的主键 id,官方的推荐是  auto_increment ,那么为什么不建议采用 uuid,使用 uuid 究竟有什么坏处? 本篇博客我们就来分析这个问题,探讨一下内部的原因。 本篇博客的目录 mysql 程序实例 使用 uuid 和自增 id 的索引结构对比 总结 一、mysql 和程序实例 1.1.要说明这个问题,我们首先来建立三张表 分别是  user_auto_key , user_uuid , user_random_key ,分别表示自动增长的主键,uuid 作为主键,随机 key 作为主键,其它我们完全保持不变。 根据控制变量法,我们只把每个表的主键使用不同的策略生成,而其他的字段完全一样,然后测试一下表的插入速度和查询速度: 注:这里的随机 key 其实是指用雪花算法算出来的前后不连续不重复无规 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览