PostgreSQL中UUID v7作为主键

💡 原文中文,约900字,阅读约需3分钟。
📝

内容提要

PostgreSQL中UUID v7作为主键,适合B树索引,插入速度比UUID v4快2倍。Postgres 17可能会原生支持UUID v7。

🔎

延伸解读

UUID v7 与 B 树索引的契合点

文章指出,B 树索引最适合有序值,而随机 UUID 因无序性不适合作为主键。UUID v7 生成按时间排序的值,每次生成的新值都更大,因此能有效利用 B 树索引,提升插入性能。这解释了为何 UUID v7 比 UUID v4 更适合作为 PostgreSQL 主键。

性能提升与存储代价的权衡

使用 UUID v7 插入速度比 UUID v4 快约 2 倍,但文章强调,由于 UUID 是 128 位类型,存储单个值需要 16 字节,即使经过优化,它仍不是主键的最佳类型。读者需在插入性能与存储开销之间做出权衡。

Java 中的实现与未来原生支持

在 Java 中使用 UUID v7 需要引入第三方库 java-uuid-generator,通过 Generators.timeBasedEpochGenerator().generate() 生成。文章提到 Postgres 17 很可能原生支持 UUID v7,届时可能无需依赖外部库,简化开发流程。

❓

Q&A

UUID v7在PostgreSQL中有什么优势?

UUID v7适合B树索引,插入速度比UUID v4快约2倍。

为什么随机UUID不适合B树索引?

随机UUID不适合B树索引,因为B树索引最适合有序值。

如何在Java中使用UUID v7?

在Java中使用UUID v7需要第三方库java-uuid-generator。

UUID v7的存储大小是多少?

UUID是128位数据类型,存储单个值需要16个字节。

Postgres 17对UUID v7的支持情况如何?

Postgres 17可能会原生支持UUID v7。

UUID v7的生成方式是什么?

UUID v7产生按时间排序的值,每次生成的新值都会更大。

🏷️

标签

➡️

继续阅读