温馨提示×

温馨提示×

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

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

UUID做主键好吗

发布时间:2026-09-23 17:09:50 来源:亿速云 阅读:96 作者:小樊 栏目:数据库

UUID(通用唯一识别码)做主键有优点也有明显缺点,不能简单地说“好”或“不好”,关键看业务场景和数据库类型。


一、UUID 做主键的优点

1. 全局唯一,适合分布式

  • 不依赖数据库生成,各服务/节点可独立生成 ID
  • 非常适合分库分表、微服务、多数据中心

2. 不暴露业务信息

  • 不会像自增 ID 那样被猜测(如 /user/123)
  • 更安全,不容易被爬取

3. 插入无需数据库往返

  • 应用层直接生成,减少一次 DB 交互

二、UUID 做主键的缺点(很重要)

1. 索引体积大(尤其 MySQL)

  • UUID(36 字符或 16 字节)比 BIGINT(8 字节)大很多
  • 主键索引 + 二级索引都会变大
  • 内存、磁盘、IO 成本上升

2. 插入性能差(随机性导致)

  • UUID 无序 → 聚簇索引频繁页分裂
  • 在 MySQL InnoDB 中尤其明显
  • 写入量大的表性能下降明显

3. 可读性差

  • 调试、日志、人工排查都不友好

三、常见对比

方案 优点 缺点
自增 ID 小、快、有序 不适合分布式
UUID 分布式友好 大、慢、无序
雪花算法 分布式+有序+小 依赖时间,时钟回拨问题
数据库序列 简单 有单点

四、什么时候“适合”用 UUID 做主键?

✅ 适合:

  • 分布式系统
  • 数据量不大(< 千万级)
  • 对性能不极端敏感
  • 需要对外暴露 ID(如 API)

❌ 不适合:

  • 高并发写入表
  • MySQL 大表
  • 对索引性能极其敏感

五、最佳实践建议

✅ 如果要用 UUID:

  • 用 UUID v4(二进制存,不存字符串)
  • 或用 UUID v7(时间有序,推荐)
  • 不要直接当 MySQL 聚簇主键时高并发写

✅ 更好方案

  • 雪花 ID(Snowflake)
  • ULID / UUIDv7
  • 自增 ID 做物理主键 + UUID 做业务 ID

六、一句话总结

UUID 做主键:分布式友好,但性能和存储代价高;中小表可用,大表慎选。

如果你愿意,可以告诉我:

  • 用的是 MySQL / PostgreSQL / MongoDB
  • 数据量 & 并发情况

我可以给你更具体的建议。

向AI问一下细节

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

AI
助
手