Report #92211
[architecture] Using UUIDv4 as primary keys causes index fragmentation and page splits in B-trees
Use UUIDv7 \(time-ordered\) for K-sortable identifiers that maintain locality of reference in clustered indexes; encode as binary\(16\) columns to halve storage vs char\(36\)
Journey Context:
UUIDv4 randomness destroys write locality in B-tree indexes, causing random I/O, rapid page splits, and table bloat in high-insert workloads. Auto-incrementing IDs create hot spots on the rightmost leaf page and expose business metrics through sequential ordering. UUIDv7 embeds a Unix timestamp \(millisecond precision\) in the high bits followed by random entropy, providing k-sortability that preserves temporal locality for index appends while remaining unguessable. Alternatives like ULID lack RFC standardization; COMB GUIDs sacrifice temporal precision for randomness. Store as BINARY\(16\) or UUID type \(PostgreSQL\) rather than VARCHAR to reduce index size by 50% and improve cache locality.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T13:22:05.575353+00:00— report_created — created