对比
UUID v7 与 UUID v4 对比
v4 看不出创建时间。v7 把毫秒写进编号,这会改变排序,也可能改变索引的增长方式。
| UUID v4 | UUID v7 | |
|---|---|---|
| 规范 | RFC 9562 第 4 版 | RFC 9562 第 7 版 |
| 时间 | 没有 | 48 位 Unix 毫秒 |
| 随机位 | 去掉版本和变体后有 122 位 | 本站为 74 位(12 + 62) |
| 文本排序 | 不按时间 | 按毫秒 |
| 同一毫秒 | 不适用 | 本站是随机数,不是计数器 |
| 是否露出时钟 | 否 | 是,精度到毫秒 |
随机 v4 主键往往会插到 B-tree 的各处。时钟往前走时,v7 更常落在较新的一侧。这可能减少分散的页分裂,但取决于表、填充因子和写入者的数量。它不能保证查询变快。
因为时间可见,不要把 v7 用在创建时间本身敏感的地方。两个版本都不是密钥。
常见问题
哪一个是随机的?
除了版本位和变体位,v4 使用随机位。本站的 v7 使用毫秒时间戳,再加上 74 位随机数。
哪一个按时间排序?
只有 v7 把时间放在高位,所以标准文本会按毫秒排序。v4 不会。
v7 会取代 v4 吗?
不会。如果不希望编号本身露出时间,v4 仍然是正常选择。