PostgreSQL vs. MySQL: Der Vergleich | 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

PostgreSQL Vs MySQL Vergleich

Zuletzt aktualisiert: 20.01.2026 um 10:05 Uhr

PostgreSQL vs. MySQL: Der Vergleich

Beide sind exzellente relationale Datenbanken. Dieser Vergleich hilft Ihnen, die richtige Wahl für Ihr Projekt zu treffen.

Übersicht

Aspekt PostgreSQL MySQL
Lizenz PostgreSQL License (BSD-like) GPL / Kommerziell (Oracle)
Fokus Feature-reich, Standard-konform Einfach, schnell, weit verbreitet
ACID Vollständig Mit InnoDB: Ja
JSON Exzellent (JSONB) Gut (JSON)
Replikation Streaming, Logical Statement/Row-based

PostgreSQL-Stärken

-- Erweiterte Datentypen
CREATE TABLE products (
    id SERIAL PRIMARY KEY,
    name VARCHAR(255),
    tags TEXT[],              -- Array
    metadata JSONB,           -- Binary JSON
    price NUMERIC(10,2),
    location POINT,           -- Geometrie
    ip_range INET,            -- IP-Adressen
    created_at TIMESTAMPTZ
);

-- Array-Abfragen
SELECT * FROM products WHERE 'sale' = ANY(tags);
SELECT * FROM products WHERE tags @> ARRAY['sale', 'new'];

-- JSONB-Abfragen
SELECT * FROM products WHERE metadata @> '{"color": "red"}';
SELECT * FROM products WHERE metadata->>'brand' = 'Apple';
CREATE INDEX idx_metadata ON products USING GIN (metadata);

-- Window Functions (auch MySQL 8+)
SELECT name, price,
    AVG(price) OVER (PARTITION BY category) as avg_category_price,
    RANK() OVER (PARTITION BY category ORDER BY price DESC)
FROM products;

-- CTEs (Common Table Expressions)
WITH recent_orders AS (
    SELECT * FROM orders WHERE created_at > NOW() - INTERVAL '30 days'
)
SELECT customer_id, COUNT(*) FROM recent_orders GROUP BY customer_id;

-- Rekursive CTEs
WITH RECURSIVE subordinates AS (
    SELECT id, name, manager_id FROM employees WHERE id = 1
    UNION ALL
    SELECT e.id, e.name, e.manager_id
    FROM employees e
    JOIN subordinates s ON e.manager_id = s.id
)
SELECT * FROM subordinates;

MySQL-Stärken

-- Einfachheit und Verbreitung
-- Viele Hosting-Provider, WordPress, etc.

-- Schnelle Lese-Performance (einfache Queries)
SELECT * FROM users WHERE id = 123;

-- JSON (seit 5.7)
CREATE TABLE products (
    id INT AUTO_INCREMENT PRIMARY KEY,
    data JSON
);

SELECT JSON_EXTRACT(data, '$.name') FROM products;
SELECT data->>'$.name' FROM products;  -- Kurzform

-- Fulltext Search (einfach)
CREATE FULLTEXT INDEX idx_search ON articles(title, content);
SELECT * FROM articles WHERE MATCH(title, content) AGAINST('search term');

-- Generated Columns
CREATE TABLE orders (
    id INT PRIMARY KEY,
    subtotal DECIMAL(10,2),
    tax_rate DECIMAL(5,2),
    tax DECIMAL(10,2) GENERATED ALWAYS AS (subtotal * tax_rate) STORED
);

-- MySQL 8: Window Functions
SELECT name, salary,
    SUM(salary) OVER (ORDER BY hire_date) as running_total
FROM employees;

Performance-Vergleich

# Generelle Beobachtungen:

PostgreSQL:
+ Komplexe Queries (JOINs, Subqueries)
+ Große Datenmengen
+ Parallele Queries
+ JSONB-Operationen
+ Write-Heavy Workloads

MySQL:
+ Einfache Read-Heavy Workloads
+ Weniger Ressourcen bei kleinen DBs
+ Replikation Setup einfacher
+ Point-Lookups (Primary Key)

# Moderne Versionen: Beide sehr schnell!
# Wahl oft andere Faktoren als pure Performance

Feature-Vergleich

Feature PostgreSQL MySQL
Partial Indexes
Materialized Views
Full-Text Search ✅ (erweitert) ✅ (einfach)
GIS/PostGIS ✅ (exzellent) ✅ (basic)
Foreign Data Wrappers
Table Inheritance
UPSERT ✅ ON CONFLICT ✅ ON DUPLICATE KEY

Wann welche DB?

PostgreSQL wählen für:
  • Komplexe Datenmodelle
  • JSON-heavy Anwendungen
  • Geo/GIS-Daten (PostGIS)
  • Analytische Workloads
  • Wenn ACID kritisch ist
  • Enterprise-Anwendungen
MySQL wählen für:
  • Einfache Web-Anwendungen
  • WordPress, Drupal, etc.
  • Shared Hosting
  • Team kennt MySQL besser
  • Read-heavy Workloads
  • Existierendes MySQL-Ökosystem

Migration

# MySQL → PostgreSQL: pgloader
pgloader mysql://user:pass@host/db postgresql://user:pass@host/db

# PostgreSQL → MySQL: Komplexer, manuell oder Tools
# - mysqldump/pg_dump + Konvertierung
# - AWS DMS
# - Eigene Scripts

# Typische Anpassungen:
# AUTO_INCREMENT → SERIAL
# DATETIME → TIMESTAMP
# TINYINT(1) → BOOLEAN
# ENUM → CHECK oder eigene Tabelle
# JSON-Funktionen anpassen

Weitere Informationen

Enjix Beta

Enjyn AI Agent

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