📊 UUID vs автоинкремент в качестве первичного ключа
Спор древний, но решается не вкусовщиной, а тем, кто и когда генерирует ключ.
🔹 Автоинкремент хорош, когда:
— Ключ нужен только внутри одной БД
— Важна плотная индексация и предсказуемый порядок вставки (B-tree счастлив)
— Не страшно, что /users/42 выдаёт размер таблицы наружу
🔹 UUID (а лучше UUIDv7) уместен, когда:
— ID нужно сгенерировать на клиенте/в другом сервисе до записи в БД
— Идёт шардирование или слияние данных из нескольких источников
— Последовательный ID — это утечка бизнес-метрики
⚠️ Частая ловушка
Случайный UUIDv4 как кластерный ключ в InnoDB. Вставки идут вразнобой по индексу → фрагментация страниц, распухание, просадка на записи. Именно поэтому появился UUIDv7, он временно-упорядоченный, ложится в индекс почти как автоинкремент, но остаётся глобально уникальным.
Практичный компромисс: автоинкремент как внутренний PK + UUIDv7 как публичный идентификатор в URL и API. Внутри — быстро, наружу — безопасно.
Post #6606
1.82K
- 👍 5
- 🔥 3
- ❤ 2
- 👏 1