@@ -113,6 +113,8 @@ sortable (like :ref:`ULIDs <ulid>`). It's more efficient for database indexing
113
113
It's recommended to use UUIDv7 instead of UUIDv6 because it provides
114
114
better entropy.
115
115
116
+ .. _uid-uuid-v7 :
117
+
116
118
**UUID v7 ** (UNIX timestamp)
117
119
118
120
Generates time-ordered UUIDs based on a high-resolution Unix Epoch timestamp
@@ -332,6 +334,14 @@ entity primary keys::
332
334
// ...
333
335
}
334
336
337
+ .. caution ::
338
+
339
+ Using UUIDs as primary keys is usually not recommended for performance reasons:
340
+ indexes are slower and take more space (because UUIDs in binary format take
341
+ 128 bits instead of 32/64 bits for auto-incremental integers) and the non-sequential
342
+ nature of UUIDs fragments indexes. :ref: `UUID v7 <uid-uuid-v7 >` is the only
343
+ variant that solves the fragmentation issue (but the index size issue remains).
344
+
335
345
When using built-in Doctrine repository methods (e.g. ``findOneBy() ``), Doctrine
336
346
knows how to convert these UUID types to build the SQL query
337
347
(e.g. ``->findOneBy(['user' => $user->getUuid()]) ``). However, when using DQL
@@ -510,9 +520,15 @@ entity primary keys::
510
520
}
511
521
512
522
// ...
513
-
514
523
}
515
524
525
+ .. caution ::
526
+
527
+ Using ULIDs as primary keys is usually not recommended for performance reasons.
528
+ Although ULIDs don't suffer from index fragmentation issues (because the values
529
+ are sequential), their indexes are slower and take more space (because ULIDs
530
+ in binary format take 128 bits instead of 32/64 bits for auto-incremental integers).
531
+
516
532
When using built-in Doctrine repository methods (e.g. ``findOneBy() ``), Doctrine
517
533
knows how to convert these ULID types to build the SQL query
518
534
(e.g. ``->findOneBy(['user' => $user->getUlid()]) ``). However, when using DQL
0 commit comments