博客
关于我
Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
阅读量:794 次
发布时间:2023-02-10

本文共 1124 字,大约阅读时间需要 3 分钟。

为什么不推荐使用 UUID 作为 MySQL 表的主键?

在数据库设计中,选择合适的主键策略至关重要。MySQL 官方推荐使用 auto_increment 的连续自增主键,而不是 UUID 或雪花算法生成的随机唯一标识符(uuid)。这种推荐背后有其深层次的原因,值得我们深入探讨。

UUID 的潜在问题

  • 性能影响

    UUID 的生成涉及复杂的算法和哈希运算,这会增加插入操作的开销。相比之下,auto_increment 只需维护一个简单的计数器,直接生成下一个连续的自增值,操作效率更高。

  • 存储需求

    UUID 通常占用 36 字节(16 字节的 UUID 加上 12 字节的时间戳),而 auto_increment 的主键只需 8 字节(在 64 位系统中)。使用 UUID 会显著增加存储空间的占用,尤其在高并发写入场景下,这可能带来性能瓶颈。

  • 唯一性保证

    虽然 UUID 是全球唯一的,但在实际应用中,数据库主键的唯一性通常可以通过数据库引擎自身管理,而无需依赖外部算法。auto_increment 主键自动保证唯一性,简化了数据库管理。

  • 可读性和维护

    UUID 的不规律性使得主键的可读性较差,尤其在调试和复制数据时,寻找特定记录的主键值会变得更加麻烦。而 auto_increment 主键具有可读性和管理性,方便数据库管理员进行分析和维护。

  • 测试与对比

    为了验证这些假设,我们可以设计一系列测试,比较不同主键生成策略对 INSERT 和 SELECT 操作的影响。以下是测试的三个表结构:

  • user_auto_key:使用 auto_increment 生成主键。
  • user_uuid:使用 UUID 作为主键。
  • user_random_key:使用雪花算法生成的随机唯一标识符作为主键。
  • 在测试过程中,我们将只改变每个表的主键生成策略,保持其他字段完全一致。通过测量插入操作的时间和查询效率,我们可以得出以下结论:

    • user_auto_key 表:插入速度最快,查询效率最高。
    • user_uuid 表:插入速度明显慢于 auto_increment,查询效率也略有下降。
    • user_random_key 表:虽然 UUID 的唯一性更强,但雪花算法生成的随机标识符并不能显著提升性能,反而可能因为存储需求增加而影响整体性能。

    总结

    从性能、存储需求和维护成本等多个方面来看,auto_increment 主键策略在 MySQL 中是更优的选择。尽管 UUID 提供了唯一性保证,但其复杂的生成算法和较高的存储需求使其不适合作为数据库主键。因此,MySQL 官方推荐使用连续自增主键策略,这种方法既高效又易于管理,是更合适的选择。

    转载地址:http://mkbfk.baihongyu.com/

    你可能感兴趣的文章
    MySQL 数据库的高可用性分析
    查看>>
    MySQL 数据库设计总结
    查看>>
    Mysql 数据库重置ID排序
    查看>>
    Mysql 数据类型一日期
    查看>>
    MySQL 数据类型和属性
    查看>>
    mysql 敲错命令 想取消怎么办?
    查看>>
    Mysql 整形列的字节与存储范围
    查看>>
    mysql 断电数据损坏,无法启动
    查看>>
    MySQL 日期时间类型的选择
    查看>>
    Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
    查看>>
    MySQL 是如何加锁的?
    查看>>
    MySQL 是怎样运行的 - InnoDB数据页结构
    查看>>
    mysql 更新子表_mysql 在update中实现子查询的方式
    查看>>
    MySQL 有什么优点?
    查看>>
    mysql 权限整理记录
    查看>>
    mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
    查看>>
    MYSQL 查看最大连接数和修改最大连接数
    查看>>
    MySQL 查看有哪些表
    查看>>
    mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
    查看>>
    MySql 查询以逗号分隔的字符串的方法(正则)
    查看>>