UUID · Base de données · PostgreSQL · MySQL · SQLite
UUID comme clé primaire en base de données
Mis à jour : mai 2026
Utiliser les UUID comme clés primaires est une pratique courante dans les applications distribuées. Le choix de la version (v4 ou v7) et du type de colonne a un impact direct sur les performances d'index et la taille du stockage.
Gratuit · Sans upload · Génération dans le navigateur
PostgreSQL
PostgreSQL dispose d'un type natif UUID (16 octets). C'est le choix optimal.
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email TEXT NOT NULL
);
Pour UUID v7 (disponible via extension ou généré en application) :
CREATE TABLE events (
id UUID PRIMARY KEY, -- généré côté app en v7
created_at TIMESTAMPTZ DEFAULT now()
);
MySQL / MariaDB
MySQL n'a pas de type UUID natif. Deux options :
- CHAR(36) : lisible, mais 36 octets vs 16 pour BINARY. Index plus lent.
- BINARY(16) : compact, performances optimales. Convertir avec
UUID_TO_BIN()/BIN_TO_UUID().
CREATE TABLE users (
id BINARY(16) PRIMARY KEY,
email VARCHAR(255)
);
INSERT INTO users (id, email) VALUES
(UUID_TO_BIN(UUID(), 1), 'alice@example.com');
Le second paramètre 1 de UUID_TO_BIN réorganise les bits pour améliorer le tri (utile avec UUID v1, moins nécessaire avec v7).
UUID v4 vs v7 pour les performances
- UUID v4 : insertions aléatoires dans l'index → fragmentation B-tree → réécriture fréquente de pages → plus lent au-delà de quelques millions de lignes.
- UUID v7 : insertions séquentielles en fin d'index → pas de fragmentation → performances comparables à un
BIGINT AUTO_INCREMENT.
Pour les tables à fort volume d'insertions (logs, events, audits), préférez UUID v7.
Questions fréquentes
UUID ou BIGINT AUTO_INCREMENT ?
BIGINT reste plus compact (8 octets) et légèrement plus rapide. UUID offre l'universalité : génération côté client, fusion de bases de données, exposition sécurisée via API. Pour les applications distribuées ou multi-tenant, UUID v7 est la référence.
Faut-il un index sur les colonnes UUID référencées ?
Oui, comme pour toute clé étrangère. Sans index, les jointures sur UUID dégradent très vite les performances.
Les ORM supportent-ils UUID v7 ?
Prisma, Sequelize, TypeORM et Hibernate supportent les UUID générés côté application. Il suffit de générer un UUID v7 dans votre code et de le passer à l'ORM.