78 Dokumentationen verfügbar

Wissensdatenbank

MySQL Performance Optimieren

Zuletzt aktualisiert: 09.01.2026 um 18:23 Uhr

MySQL Performance optimieren: Praktische Tipps

Langsame Datenbankabfragen bremsen Ihre Website aus. In diesem Guide zeigen wir die wichtigsten Optimierungen für MySQL – von Indexen über Query-Optimierung bis zur Server-Konfiguration.

1. Indexe richtig einsetzen

Indexe sind der wichtigste Faktor für schnelle Abfragen. Ohne Index durchsucht MySQL jede Zeile einzeln.

Index erstellen

-- Einfacher Index
CREATE INDEX idx_email ON users(email);

-- Zusammengesetzter Index (mehrere Spalten)
CREATE INDEX idx_name_created ON users(name, created_at);

-- Unique Index (keine Duplikate)
CREATE UNIQUE INDEX idx_unique_email ON users(email);

Wann Indexe verwenden?

Index sinnvoll Index nicht sinnvoll
WHERE-Bedingungen Kleine Tabellen (< 1000 Zeilen)
JOIN-Spalten Spalten die oft geändert werden
ORDER BY Spalten Spalten mit wenig verschiedenen Werten
GROUP BY Spalten TEXT/BLOB Spalten

2. Queries optimieren

EXPLAIN verwenden

EXPLAIN SELECT * FROM users WHERE email = 'test@example.com';

Zeigt wie MySQL die Abfrage ausführt. Achten Sie auf:

  • type: "ALL" ist schlecht (Full Table Scan), "ref" oder "const" ist gut
  • rows: Je weniger, desto besser
  • Extra: "Using index" ist optimal

Häufige Query-Fehler

❌ Schlecht ✅ Besser
SELECT * SELECT id, name, email
WHERE YEAR(date) = 2026 WHERE date BETWEEN '2026-01-01' AND '2026-12-31'
LIKE '%suchbegriff%' LIKE 'suchbegriff%'
OR in WHERE UNION oder IN()

Beispiel: Query verbessern

-- ❌ Langsam: Funktion auf Spalte verhindert Index
SELECT * FROM orders WHERE YEAR(created_at) = 2026;

-- ✅ Schnell: Index kann genutzt werden
SELECT * FROM orders 
WHERE created_at >= '2026-01-01' 
AND created_at < '2027-01-01';

3. Tabellen optimieren

Richtige Datentypen wählen

Statt Besser Warum
VARCHAR(255) VARCHAR(50) Weniger Speicher
INT TINYINT/SMALLINT Wenn Werte klein sind
TEXT VARCHAR Wenn Länge bekannt
DATETIME TIMESTAMP 4 statt 8 Bytes

Tabelle analysieren & optimieren

-- Statistiken aktualisieren
ANALYZE TABLE users;

-- Fragmentierung beheben
OPTIMIZE TABLE users;

-- Tabellenstatus prüfen
SHOW TABLE STATUS LIKE 'users';

4. MySQL Konfiguration

In der my.cnf (Linux) oder my.ini (Windows):

[mysqld]
# Buffer Pool (50-70% des RAM für dedizierte DB-Server)
innodb_buffer_pool_size = 1G

# Query Cache (bei MySQL 8 entfernt, bei 5.7 nützlich)
query_cache_size = 128M
query_cache_type = 1

# Verbindungen
max_connections = 150

# Temporäre Tabellen
tmp_table_size = 64M
max_heap_table_size = 64M

# Logs
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

5. Slow Query Log auswerten

# Aktivieren
SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 2;

# Auswerten mit mysqldumpslow
mysqldumpslow -s t /var/log/mysql/slow.log
⚠️ Wichtig: Nach Konfigurationsänderungen MySQL neu starten: sudo systemctl restart mysql

Quick Wins Checkliste

  • ☐ Indexe auf WHERE/JOIN Spalten prüfen
  • ☐ SELECT * durch konkrete Spalten ersetzen
  • ☐ EXPLAIN bei langsamen Queries nutzen
  • ☐ Slow Query Log aktivieren
  • ☐ innodb_buffer_pool_size anpassen
  • ☐ Regelmäßig OPTIMIZE TABLE ausführen

Weitere Informationen