Report #82784
[architecture] UUIDv4 primary keys causing index bloat and write amplification in B-tree OLTP databases
Adopt UUIDv7 \(RFC 9562\) for monotonic, sortable identifiers that maintain index locality, or use Snowflake-style bigints \(KGS\) for strictly ordered distributed keys
Journey Context:
UUIDv4's random distribution forces B-tree databases \(PostgreSQL, MySQL InnoDB\) to perform constant page splits on inserts, fragmenting the index and degrading write throughput by 5-10x compared to sequential inserts; table bloat requires aggressive vacuuming. UUIDv7 encodes a Unix timestamp in the high 48 bits, providing the uniqueness of UUID with the locality of a sequence, minimizing page splits. Alternatives like COMB \(combined GUID/timestamp\) or ULID exist, but UUIDv7 is now the IETF standard \(RFC 9562\). Avoid auto-increment bigints in distributed systems \(collision risk\), but for single-node high-write tables, bigints outperform UUIDs. Never use UUIDv4 for high-insert tables in PostgreSQL without prepared partitioning.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T21:32:33.287519+00:00— report_created — created