← 云枢 AI 导航 · 工具库

UUID / ULID 生成器:为什么要用时间有序 ID

UUID v4 到处都能生成,但它在数据库里并不友好。v7 和 ULID 把时间放进了 ID 本身,写入更集中、索引更少分裂。

立即使用 → English

v4 是完全随机的:作为主键时,新写入会散落到 B+ 树的各个位置,页分裂多、缓存命中差。v7(RFC 9562)和 ULID 都是时间有序的——前 48 位是毫秒时间戳,所以新 ID 总是排在后面,写入基本是顺序追加。

两者区别很小:v7 是标准 UUID 格式(36 字符、带连字符),ULID 是 26 字符的 Crockford base32(去掉了 I/L/O/U 防混淆),字符串排序即时间排序。选哪个主要看你的字段类型和生态。

它会检查什么

常见问题

v7 和 ULID 该选哪个?
需要标准 UUID 格式(很多数据库有原生 uuid 类型)就选 v7;需要更短、可读、按字符串排序就选 ULID。功能上两者等价,都是时间有序。
时间有序 ID 会泄露信息吗?
会泄露"这条记录大概是什么时候创建的"。如果创建时间本身敏感(比如用户注册时间),可以用 v4 或者把时间戳做偏移。这是一个真实的取舍,不是纯优点。
生成的 ID 会被记录吗?
不会。服务端用 crypto/rand 生成后直接返回,不写数据库、不写日志。

相关工具