Report #63768
[architecture] UUIDv4 primary keys causing index fragmentation and insert performance degradation in high-write databases
Replace UUIDv4 with UUIDv7 \(time-ordered UUIDs\) for primary keys. UUIDv7 encodes a Unix timestamp in the first 48 bits, followed by random data, ensuring monotonic insertion order while retaining global uniqueness. Use the 'uuidv7' extension in PostgreSQL 16\+, or implement via application code using libraries like 'uuidjs' or 'ulid' as a fallback.
Journey Context:
UUIDv4 is completely random, causing every new row to be inserted at a random position in B-tree indexes, leading to massive page splits, fragmentation, and degraded write throughput in high-insert workloads \(e.g., IoT telemetry, event logs\). Sequential IDs \(BIGSERIAL\) solve performance but create hot spots in distributed systems and leak business intelligence. UUIDv7 offers the best of both worlds: the first 48 bits are a timestamp, so inserts are roughly sequential \(minimizing index fragmentation\) while the remaining bits provide uniqueness without coordination. This is superior to ULID \(which lacks official standardization\) and UUIDv6 \(which has endianness issues\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T13:31:29.371359+00:00— report_created — created