UUIDの衝突確率は?|v4(ランダム)の安全性と仕組み
UUID データベース 設計 アルゴリズム
結論
UUID v4が衝突する確率は天文学的に低い。1秒間に10億個生成しても、衝突するまで85年以上かかる計算。実務上は「絶対に重複しない」と考えて問題ない。
UUID v4とは
UUID(Universally Unique Identifier)のバージョン4は、128ビットのビット列のうち、122ビットを完全な乱数で生成する方式です。
衝突確率のシミュレーション
どのくらいの数を生成すると、1つでも衝突(重複)が発生するか?
| 生成数 | 衝突確率 |
|---|---|
| 1,000,000,000 (10億個) | 約 10^-15 (ほぼ0) |
| 10^15 (1000兆個) | 約 0.00000001% |
| 10^18 | 約 1% (ここでようやく意識するレベル) |
地球上のすべての人間がそれぞれ1億個のUUIDを生成しても、重複が発生する確率は0.00000000006%以下です。
なぜUUIDを使うのか
- 分散環境で便利 — 中央集権的なID発行サーバーなしで、各クライアントが勝手にIDを発行しても衝突しない。
- 推測されにくい — 連番ID(1, 2, 3…)と違い、外部からデータの総数や順序を推測されない。
🆔 この場でUUIDを生成する
注意点:インデックス性能
UUIDはランダムな文字列なため、データベース(B-treeインデックス)の挿入性能が連番IDに比べて落ちる傾向があります。性能が重要な場合は、時系列順に並ぶ「ULID」や、UUID v7の検討をおすすめします。