跳到主要内容
版本:Candidate-4.1

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 之后,从而提升索引性能。

优势

  1. 时间有序:后生成的 UUID 值大于先生成的值。
  2. 更优的索引性能:在 B-tree 索引中具有更好的局部性。
  3. 减少碎片:顺序插入可减少页分裂。
  4. 全局唯一:随机位确保即使在同一毫秒内生成的 UUID 也不会重复。

与 UUID v4 的对比

特性uuid_numeric() (v4)uuid_v7_numeric() (v7)
顺序性随机按时间有序
索引性能较差较好
碎片情况
是否包含时间信息是(48 位毫秒时间戳)
Rocky the happy otterStarRocks Assistant

AI generated answers are based on docs and other sources. Please test answers in non-production environments.