uuid_v7
VARCHAR 型の時系列順 UUID v7 を返します。UUID v7 は RFC 9562 で定義されています。ランダムに生成される UUID v4 と比較して、UUID v7 は時間順序を保持するため、データベースにおいてインデックスの局所性が向上し、断片化が軽減されるなど、より高いパフォーマンスが期待できます。
生成される UUID は 36 文字で構成され、5 つの 16 進数ブロックを 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 v4 との比較
| 項目 | uuid_numeric() (v4) | uuid_v7_numeric() (v7) |
|---|---|---|
| 順序性 | ランダム | 時間順序付き |
| インデックス性能 | 低い | 高い |
| 断片化 | 高い | 低い |
| タイムスタンプ情報 | なし | あり(48 ビットのミリ秒) |