UUID vs. Auto-Increment: ID-Strategien | Enjyn Gruppe
Hallo Welt
Hallo Welt
Original Lingva Deutsch
Übersetzung wird vorbereitet...
Dieser Vorgang kann bis zu 60 Sekunden dauern.
Diese Seite wird erstmalig übersetzt und dann für alle Besucher gespeichert.
0%
DE Zurück zu Deutsch
Übersetzung durch Lingva Translate

235 Dokumentationen verfügbar

Wissensdatenbank

UUID Vs Auto Increment IDs

Zuletzt aktualisiert: 20.01.2026 um 10:05 Uhr

UUID vs. Auto-Increment: ID-Strategien

Die Wahl der ID-Strategie beeinflusst Skalierung und Architektur. Vergleichen Sie UUIDs mit Auto-Increment IDs.

Vergleich

Aspekt Auto-Increment UUID
Größe 4-8 Bytes 16 Bytes (36 Zeichen)
Lesbarkeit Gut (1, 2, 3) Schlecht
Vorhersagbar Ja ⚠️ Nein ✓
Verteilte Systeme Problematisch Ideal
Index-Performance Optimal Schlechter (v4)

Auto-Increment

-- MySQL
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(255)
);

-- PostgreSQL
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255)
);

-- Oder mit IDENTITY (SQL Standard)
CREATE TABLE users (
    id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    name VARCHAR(255)
);

-- Vorteile:
-- ✅ Kompakt, schnelle JOINs
-- ✅ Natürliche Sortierung (ältere IDs zuerst)
-- ✅ Einfach zu debuggen
-- ✅ Optimale B-Tree Performance

-- Nachteile:
-- ❌ Enumeration Attack (ID erraten)
-- ❌ Information Disclosure (Anzahl User sichtbar)
-- ❌ Schwierig bei verteilten Systemen
-- ❌ Merge-Konflikte bei Multi-Master

UUID

-- PostgreSQL (native UUID)
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

CREATE TABLE users (
    id UUID DEFAULT uuid_generate_v4() PRIMARY KEY,
    name VARCHAR(255)
);

-- Oder mit gen_random_uuid() (PostgreSQL 13+)
CREATE TABLE users (
    id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
    name VARCHAR(255)
);

-- MySQL 8+
CREATE TABLE users (
    id CHAR(36) PRIMARY KEY DEFAULT (UUID()),
    name VARCHAR(255)
);

-- Oder BINARY(16) für bessere Performance
CREATE TABLE users (
    id BINARY(16) PRIMARY KEY,
    name VARCHAR(255)
);

UUID Versionen

UUID v1: Zeit + MAC-Adresse
550e8400-e29b-11d4-a716-446655440000
→ Zeitbasiert, sortierbar, aber MAC leakt

UUID v4: Zufällig
550e8400-e29b-41d4-a716-446655440000
→ Am gebräuchlichsten, nicht sortierbar

UUID v7 (neu): Zeit + Zufällig
01889c89-df6b-7f1c-a03e-85998e4bb5d8
→ Sortierbar + Zufällig → Beste für DBs!

ULID & andere Alternativen

# ULID (Universally Unique Lexicographically Sortable Identifier)
01ARZ3NDEKTSV4RRFFQ69G5FAV

# Struktur:
# 48 Bit: Timestamp (ms)
# 80 Bit: Zufällig

# Vorteile:
# ✅ Sortierbar (nach Zeit)
# ✅ URL-safe (keine -, keine /)
# ✅ Kompakter als UUID (26 Zeichen)
# ✅ Gute Index-Performance

# Node.js
npm install ulid
import { ulid } from 'ulid';
const id = ulid(); // 01ARZ3NDEKTSV4RRFFQ69G5FAV

# Andere Alternativen:
# - NanoID: ~21 Zeichen, URL-safe
# - KSUID: K-Sortable UID
# - Snowflake: Twitter's ID-Format

Best Practices

# Option 1: Interne Auto-Increment + Externe UUID
CREATE TABLE users (
    id SERIAL PRIMARY KEY,           -- Interner PK
    public_id UUID UNIQUE NOT NULL,  -- Externe Referenz
    name VARCHAR(255)
);

-- API gibt nur public_id zurück
-- JOINs intern mit Integer-ID (schnell)
-- Keine Enumeration möglich

# Option 2: UUID v7 für alles
CREATE TABLE users (
    id UUID DEFAULT gen_uuid_v7() PRIMARY KEY,
    name VARCHAR(255)
);

-- Sortierbar + Nicht vorhersagbar
-- Gute Index-Performance

Code-Beispiele

// Node.js: UUID v4
import { v4 as uuidv4 } from 'uuid';
const id = uuidv4(); // '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'

// UUID v7 (neu)
import { v7 as uuidv7 } from 'uuid';
const id = uuidv7(); // Zeitbasiert + sortierbar

// NanoID
import { nanoid } from 'nanoid';
const id = nanoid(); // 'V1StGXR8_Z5jdHi6B-myT'

// PHP
$uuid = \Ramsey\Uuid\Uuid::uuid4()->toString();

// Python
import uuid
id = str(uuid.uuid4())

Wann was verwenden?

Auto-Increment wenn:
  • Einzelne Datenbank
  • IDs nur intern verwendet
  • Performance kritisch
  • Keine Sicherheitsbedenken
UUID/ULID wenn:
  • Verteilte Systeme / Microservices
  • IDs in URLs / öffentlich sichtbar
  • Client-seitige ID-Generierung
  • Daten-Synchronisation zwischen DBs

Weitere Informationen

Enjix Beta

Enjyn AI Agent

Hallo 👋 Ich bin Enjix — wie kann ich dir helfen?
120