在数据库设计中,UUID(Universally Unique Identifier,通用唯一识别码) 常被用作主键或唯一标识符。下面从多个维度把 UUID 与常见的其他标识符(如自增ID、雪花算法、GUID、Token、Hash 等)进行系统对比,帮助你在实际场景中做出选择。
| 标识符类型 | 示例 | 典型用途 |
|---|---|---|
| UUID | 550e8400-e29b-41d4-a716-446655440000 |
主键、分布式唯一ID |
| 自增 ID | 1, 2, 3, 4 |
单体数据库主键 |
| 雪花算法 ID(Snowflake) | 1357924680133447681 |
分布式系统、高并发 |
| GUID | 同 UUID(Windows 语境) | Windows / .NET |
| 业务编号 | ORD20260121001 |
订单号、流水号 |
| Hash / MD5 | e59fbb... |
文件、摘要、去重 |
| Token | eyJhbGciOi... |
认证、会话 |
| 维度 | UUID | 自增 ID |
|---|---|---|
| 唯一性 | 全局唯一 | 仅单表唯一 |
| 分布式支持 | ✅ 原生支持 | ❌ 需额外处理 |
| 可预测性 | ❌ 不可预测 | ✅ 容易被猜测 |
| 性能(索引) | ❌ 随机写入,索引碎片 | ✅ 顺序写入 |
| 可读性 | ❌ 差 | ✅ 好 |
| 合并数据 | ✅ 无冲突 | ❌ 易冲突 |
| 长度 | 36 字符 / 128 bit | 通常 4 / 8 字节 |
✅ 结论:
| 维度 | UUID | Snowflake |
|---|---|---|
| 唯一性 | 极高 | 极高 |
| 有序性 | ❌ 无序 | ✅ 近似时间有序 |
| 索引性能 | ❌ 差 | ✅ 好 |
| 长度 | 128 bit | 64 bit |
| 时间信息 | ❌ 无 | ✅ 可反推时间 |
| 实现复杂度 | ✅ 简单 | ❌ 需时钟、节点 ID |
| 可读性 | ❌ 差 | ❌ 一般 |
✅ 结论:
| 维度 | UUID | 业务编号 |
|---|---|---|
| 唯一性 | ✅ | ✅ |
| 业务含义 | ❌ | ✅ |
| 可预测性 | ❌ | ✅(便于沟通) |
| 长度 | 长 | 可控 |
| 是否可作主键 | ✅ | ⚠️ 不推荐 |
✅ 结论:
| 维度 | UUID | Hash |
|---|---|---|
| 是否唯一 | ✅ | ⚠️ 可能碰撞 |
| 是否可逆 | ❌ | ❌ |
| 是否适合主键 | ✅ | ❌ |
| 用途 | 标识 | 校验、去重 |
✅ 结论:
| 维度 | UUID | Token |
|---|---|---|
| 是否唯一 | ✅ | ✅ |
| 是否含信息 | ❌ | ✅ |
| 是否可验证 | ❌ | ✅ |
| 是否适合主键 | ✅ | ❌ |
✅ 结论:
| 版本 | 特点 | 是否推荐 |
|---|---|---|
| UUID v1 | 时间 + MAC | ❌ 暴露机器信息 |
| UUID v3 | MD5 + 命名空间 | ❌ |
| UUID v4 | 随机 | ✅ 最常用 |
| UUID v5 | SHA1 + 命名空间 | ✅ 稳定可复现 |
| UUID v7 | 时间戳 + 随机(有序) | ✅✅ 推荐 |
✅ 建议使用 UUID v7(兼顾唯一性 + 顺序性)
| 场景 | 推荐 |
|---|---|
| 单体应用、小数据量 | 自增 ID |
| 分布式系统 | Snowflake / UUID v7 |
| 数据合并、同步 | UUID |
| 对外展示 | 业务编号 |
| 高并发写入 | Snowflake |
| 已有系统快速改造 | UUID v4 |
UUID 适合“全局唯一、不可预测、跨系统安全”的场景,但不适合对性能和顺序性要求极高的场景。
如果你愿意,我可以:
只要告诉我你的具体使用场景即可。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。