惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
MongoDB | Blog
MongoDB | Blog
Engineering at Meta
Engineering at Meta
Stack Overflow Blog
Stack Overflow Blog
Google DeepMind News
Google DeepMind News
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
I
InfoQ
B
Blog
WordPress大学
WordPress大学
Jina AI
Jina AI
小众软件
小众软件
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园_首页
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
G
Google Developers Blog
C
Check Point Blog
月光博客
月光博客
L
LangChain Blog
GbyAI
GbyAI

博客园 - AlfredZhao

执行新项目 python 脚本前,先用 conda 建一个独立环境 Git 提交代码:从报错到 SSH 免密推送 GitHub 克隆他人私有仓库:从授权到下载 理解Oracle Property Graph:以账户转账示例完成图特性最小测试 APEX 无法分配 SH 用户?一个存储过程轻松解决 SH 中文化样例数据使用手册 Oracle 排除非业务表:一份能直接抄的“全量过滤”SQL 进程都杀了,为什么 `netstat` 还能看到端口? MAC 空间告急?Codex 的 156GB 缓存垃圾,这样清! 人工清理问题数据:先查准,再删除 TK(Trusted Knowledge)为何而生? 使用快捷键快速切换 Mac 外接显示器模式 客户环境 Nginx 配置:流式报表与超时排查要点 Security Central:数据库安全的统一控制与运营平台 Palantir 眼中的一次“订单可能延期”,如何成为实时决策的起点? 从一条订单消息到 Bronze、Silver、Gold:我的第一次 Kafka + Lakehouse 实验 用 crontab 给 LLM 使用量装上“监控眼” DeepSeek 与 GPT API 价格调整:该关注什么? 查看 Oracle 数据库中的定时任务执行情况 Codex 专用用户登录后自动进入默认项目目录 Mac 小技巧:用方向键优雅处理超长网址 Oracle GDD 与 Raft:别把共识机制和数据主权混为一谈 在 Oracle APEX 中用 BGE_BASE 生成向量:从模型导入到历史数据更新 行业人+AI:真正有价值的四个关键要素 知识库文件解析失败:一次由 Domain Index 引发的定位记录 Unicode 码位数、UTF-8 字节数、中英文差异和 Oracle 长度别再混淆了 Skill 的使用:从路径到能力边界 切换 Embedding 模型时,千万别忽略历史向量维度 kbot 适配 GPT-5.6:一次参数兼容性排查 Git 打 Tag 上传 GitHub 遇到 SSH 超时,如何处理?
UUID v4 与 v7:同样是唯一 ID,为什么数据库表现可能完全不同?
AlfredZhao · 2026-08-31 · via 博客园 - AlfredZhao

2026-08-31 07:23  AlfredZhao  阅读(10)  评论()    收藏  举报

UUID(Universally Unique Identifier)是 128 位的全局唯一标识符。它的价值在于:不依赖数据库自增列、不依赖中心化 ID 服务,应用或多个分布式节点都可以自行生成 ID。

但 UUID 不是只有一种生成方式。对于数据库主键、唯一索引和持续写入场景,最常见也最值得理解的是 UUID v4 与 UUID v7。

01 | 先说结论

  • UUID v4:随机型 UUID,唯一性高,但插入 B-tree 索引的位置随机。
  • UUID v7:时间有序 UUID,唯一性高,并且新生成的值大致随时间递增,更适合持续插入的数据库主键。
  • 如果只在单个 Oracle 数据库内生成 ID,NUMBER + IDENTITY / SEQUENCE 往往仍是最简单、最节省索引空间的选择。
  • 如果需要应用侧生成、跨服务生成或离线生成 UUID,优先考虑 UUID v7,而不是随机 UUID v4。

UUID v4 和 v7 都是 IETF UUID 标准的一部分。v4 使用随机数据;v7 的前 48 位保存 Unix 毫秒时间戳,其余部分用于版本标识、变体标识和随机性。

02 | UUID v4:随机且无序

UUID v4 的主要来源是随机数,一个典型的 v4 示例(来自 RFC 4122 文档)如下:

550e8400-e29b-41d4-a716-446655440000

这种随机性带来一个数据库层面的问题:当 UUID v4 作为主键插入 B-tree 索引时,新记录会落在索引的随机位置。随着数据量增长,索引页频繁分裂、随机 I/O 增多,持续写入场景下的性能可能明显下降。

03 | UUID v7:时间有序

UUID v7 的设计思路不同。它的前 48 位直接取自 Unix 毫秒时间戳,因此新生成的 UUID 大致随时间递增。插入 B-tree 索引时,新记录更倾向于追加到索引末尾附近,减少了页分裂和随机写入,对持续插入更友好。

同时,UUID v7 仍然保留了足够的随机位,唯一性并不依赖单一时间戳,分布式节点各自生成也不会冲突。

04 | 如何选择

如果 ID 只在单个数据库内部生成,使用 NUMBER + IDENTITY / SEQUENCE 通常最简单,索引占用也最小。但如果业务需要在应用侧、跨服务或离线环境生成 ID,UUID v7 是比 v4 更合适的主键选择——它既保留了 UUID 的全局唯一性,又避免了随机插入带来的索引性能损耗。

关注我,和AI一起成长~