uuid_v7
返回一个按时间有序的 UUID v7,数据类型为 VARCHAR。UUID v7 定义于 RFC 9562。与随机生成的 UUID v4 相比,UUID v7 具有时间有序特性,因此在数据库中能够提供更好的性能表现,例如提升索引局部性并减少数据碎片。
生成的 UUID 长度为 36 个字符,由 5 组十六进制数字组成,并通过 4 个连字符连接,格式为:xxxxxxxx-xxxx-7xxx-xxxx-xxxxxxxxxxxx,其中版本号字段固定为 7。
该函数为非确定性函数,每次调用都会生成不同的 UUID。
语法
uuid_v7()
返回值
返回一个 VARCHAR 类型的值。
示例
mysql> SELECT uuid_v7();
+--------------------------------------+
| uuid_v7() |
+--------------------------------------+
| 019ba290-15ce-7f13-86b4-ebc97d2f72c0 |
+--------------------------------------+
1 row in set (0.01 sec)
UUID v7 格式说明
UUID v7 遵循 RFC 9562 规范,其结构如下:
- 48 位:Unix 毫秒级时间戳(时间有序部分)
- 4 位:版本号字段,固定为
7 - 12 位:随机数据
- 2 位:变体字段(RFC 4122)
- 62 位:随机数据
该结构保证后生成的 UUID 在排序时位于先生成的 UUID 之后,从而提升索引性能。
优势
- 时间有序:后生成的 UUID 值大于先生成的值。
- 更优的索引性能:在 B-tree 索引中具有更好的局部性。
- 减少碎片:顺序插入可减少页分裂。
- 全局唯一:随机位确保即使在同一毫秒内生成的 UUID 也不会重复。
与 UUID v4 的对比
| 特性 | uuid_numeric() (v4) | uuid_v7_numeric() (v7) |
|---|---|---|
| 顺序性 | 随机 | 按时间有序 |
| 索引性能 | 较差 | 较好 |
| 碎片情况 | 高 | 低 |
| 是否包含时间信息 | 否 | 是(48 位毫秒时间戳) |