← Accéder à l'outil

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.

Générer des UUID →

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.