温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

为何不用UUID用自增

发布时间:2026-10-18 16:45:29 来源:亿速云 阅读:83 作者:小樊 栏目:数据库

在数据库主键设计中,自增 ID(Auto Increment) 和 UUID 各有适用场景。很多系统在“对外不可见、内部关联用”的场景下更偏向自增,而不直接用 UUID,核心原因可以从性能、存储、可读性、业务安全性、使用场景几个维度来看。


一、为什么常用自增 ID 而不是 UUID

1. 存储更小、索引更高效

  • 自增 ID:通常是 BIGINT(8 字节)
  • UUID:
    • 字符串形式:36 字符(约 36 字节)
    • 二进制形式:16 字节

➡ 自增 ID 在索引、磁盘、内存上都更省


2. 写入性能更好(尤其 InnoDB)

MySQL / PostgreSQL 等 B+ 树索引:

  • 自增 ID:顺序写入,页分裂少
  • UUID:完全随机,写入分散,容易页分裂、碎片多

➡ 高并发写入时,UUID 性能明显更差


3. 调试和排查问题更方便

  • 自增 ID:user_id = 12345 一眼看懂
  • UUID:9f1c2a... 看不出任何信息

➡ 日志、联调、运维更友好


4. 业务安全和隐私更好

  • 自增 ID 不暴露总量和增长速度
  • UUID 虽随机,但直接暴露 UUID 也可能被遍历/关联

常见做法:

  • 内部用自增 ID
  • 对外用 UUID / 雪花 ID / 编码后的 ID

5. 关联查询更简单

  • 多表 JOIN、外键
  • 自增 ID 是整数,比较、索引都非常快
  • UUID 做外键会拖慢整个关系模型

二、UUID 更适合的场景

UUID 并非不好,而是在特定场景更合适:

✅ 分布式系统(无中心节点生成 ID)
✅ 需要提前生成 ID(离线/客户端)
✅ 多库多表合并,避免 ID 冲突
✅ 对外暴露且不想被猜测

例如:

  • 文件标识
  • 分布式任务 ID
  • 支付/订单对外号(内部仍是自增)

三、常见折中方案(最受欢迎)

✅ 自增 ID(内部) + UUID / 雪花 ID(外部)

数据库主键:id (BIGINT AUTO_INCREMENT)
业务对外:order_no (UUID / Snowflake)

✅ 雪花算法(Snowflake)

  • 趋势递增(比 UUID 友好)
  • 分布式安全
  • 比 UUID 短

四、一句话总结

自增 ID 是“数据库友好型”主键,UUID 是“分布式友好型”标识。
大部分系统:内部用自增,外部用 UUID 或其他编码 ID。

如果你愿意,我也可以结合你用的数据库(MySQL / PG / MongoDB)和业务类型给你一个具体的主键设计方案。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手