温馨提示×

温馨提示×

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

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

数据库为何用UUID做唯一标识

发布时间:2026-07-01 16:47:53 来源:亿速云 阅读:96 作者:小樊 栏目:数据库

数据库中使用UUID(Universally Unique Identifier,通用唯一识别码)作为唯一标识(Primary Key / ID),主要是为了解决分布式、合并、迁移、隐私等场景下,传统自增ID难以应对的问题。下面从“为什么用”和“有什么代价”两个角度系统说明。


一、为什么用UUID做唯一标识

1. 全局唯一(分布式友好)

UUID的最大优势是:在不同机器、不同数据库、不同时间生成的ID几乎不可能冲突

  • 自增ID:只能保证单库单表唯一
  • UUID:可以保证跨系统、跨服务、跨数据中心唯一

✅ 适合:

  • 微服务架构
  • 分布式数据库
  • 多数据中心部署

2. 避免ID暴露业务信息(安全性)

自增ID是可预测的

user_id = 1001
下一个很可能是 1002

风险:

  • 被遍历
  • 泄露业务规模
  • 易被爬虫或攻击

UUID不可预测:

a3f5c9e1-8c2d-4a87-b58d-9f03d92c1a21

✅ 适合:

  • 用户ID
  • 订单号
  • 外部暴露的资源ID

3. 支持离线生成(无数据库依赖)

UUID可以在不访问数据库的情况下生成。

优势:

  • 前端、客户端、边缘节点可生成ID
  • 插入数据库前就已确定ID
  • 减少数据库依赖

✅ 适合:

  • 移动端
  • 离线系统
  • 高并发写入

4. 方便数据合并与迁移

系统合并、分库分表、数据同步时:

  • 自增ID:极易冲突
  • UUID:天然不冲突

✅ 适合:

  • 多系统合并
  • 数据同步
  • 数据清洗

5. 避免分库分表的ID冲突

在分库分表中:

  • 自增ID需要额外管理(如步长、中心节点)
  • UUID天然支持

✅ 降低架构复杂度


二、UUID的常见版本

版本 说明 是否推荐
UUID v1 时间 + MAC ❌ 泄露机器信息
UUID v4 随机生成 ✅ 常用
UUID v7 时间排序 + 随机 ✅✅ 强烈推荐

UUID v7 是趋势:

  • 接近时间有序
  • 对索引更友好
  • 保留唯一性

三、UUID VS 自增ID 对比

维度 UUID 自增ID
全局唯一
可预测
分布式友好
插入性能 一般
索引性能 一般
可读性

四、UUID的代价与问题

1. 存储空间更大

  • 自增ID:4 / 8 字节
  • UUID:16 字节(或字符串 36 字符)

➡ 索引更大、内存占用更高


2. 索引碎片(尤其是v4)

UUID v4 完全随机:

  • 插入顺序不可控
  • B+树频繁分裂
  • 写入性能下降

✅ 解决方案:

  • 使用 UUID v7
  • 有序ID生成器(Snowflake、ULID)

3. 可读性差

8f4c2a90-3b9d-4a67-9c10-2d8e1f5a7c6b

不适合:

  • 人工排查
  • URL 简洁性(除非转码)

五、什么时候不适合用UUID

❌ 不适合:

  • 单库、小系统
  • 强顺序要求
  • 极高写入性能要求

✅ 更适合:

  • 自增ID
  • 雪花算法(Snowflake)

六、常见替代方案

方案 特点
Snowflake 有序、分布式、性能高
ULID 时间排序、比UUID短
数据库自增 简单、快
UUID v7 新标准、推荐

总结一句话

数据库用UUID做唯一标识,核心是为了“全局唯一、分布式安全、可离线生成”,代价是性能和存储空间。

如果你愿意,我可以:

  • 帮你选 UUID vs Snowflake
  • 分析 UUID v4 vs v7 在MySQL / PostgreSQL 的表现
  • 给你一个 生产级ID设计方案

直接说你的使用场景即可。

向AI问一下细节

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

AI