数据库中使用UUID(Universally Unique Identifier,通用唯一识别码)作为唯一标识(Primary Key / ID),主要是为了解决分布式、合并、迁移、隐私等场景下,传统自增ID难以应对的问题。下面从“为什么用”和“有什么代价”两个角度系统说明。
UUID的最大优势是:在不同机器、不同数据库、不同时间生成的ID几乎不可能冲突。
✅ 适合:
自增ID是可预测的:
user_id = 1001
下一个很可能是 1002
风险:
UUID不可预测:
a3f5c9e1-8c2d-4a87-b58d-9f03d92c1a21
✅ 适合:
UUID可以在不访问数据库的情况下生成。
优势:
✅ 适合:
系统合并、分库分表、数据同步时:
✅ 适合:
在分库分表中:
✅ 降低架构复杂度
| 版本 | 说明 | 是否推荐 |
|---|---|---|
| UUID v1 | 时间 + MAC | ❌ 泄露机器信息 |
| UUID v4 | 随机生成 | ✅ 常用 |
| UUID v7 | 时间排序 + 随机 | ✅✅ 强烈推荐 |
UUID v7 是趋势:
| 维度 | UUID | 自增ID |
|---|---|---|
| 全局唯一 | ✅ | ❌ |
| 可预测 | ❌ | ✅ |
| 分布式友好 | ✅ | ❌ |
| 插入性能 | 一般 | ✅ |
| 索引性能 | 一般 | ✅ |
| 可读性 | 差 | 好 |
➡ 索引更大、内存占用更高
UUID v4 完全随机:
✅ 解决方案:
8f4c2a90-3b9d-4a67-9c10-2d8e1f5a7c6b
不适合:
❌ 不适合:
✅ 更适合:
| 方案 | 特点 |
|---|---|
| Snowflake | 有序、分布式、性能高 |
| ULID | 时间排序、比UUID短 |
| 数据库自增 | 简单、快 |
| UUID v7 | 新标准、推荐 |
数据库用UUID做唯一标识,核心是为了“全局唯一、分布式安全、可离线生成”,代价是性能和存储空间。
如果你愿意,我可以:
直接说你的使用场景即可。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。