WordPress speichert alles in einer MySQL- (oder MariaDB-) Datenbank. Mit der Zeit bläht sich diese Datenbank auf und sammelt unnötige Daten, was Abfragen und die gesamte Website verlangsamen kann. Eine größere Datenbank bedeutet längere Backup-Zeiten, langsame SELECT-Abfragen und einen erhöhten Time To First Byte (TTFB).
In diesem umfassenden Leitfaden für Entwickler gehen wir durch die fortgeschrittene Datenbankoptimierung – von der einfachen Bereinigung über die Analyse von Abfragen bis hin zur InnoDB-Konfiguration.
Warum Datenbankoptimierung 2026 kritisch ist
Im Jahr 2026, wenn ein TTFB unter 100ms der Standard ist, ist eine “schwere” Datenbank ein Anker für Ihre Website. Selbst wenn Sie einen superschnellen Server (PHP 8.4, NVMe) haben, können schlecht optimierte SQL-Abfragen die Leistung killen.
Hauptursachen für Datenbankprobleme:
- Bloatware (Datenüberschuss): Beitragsrevisionen, Kommentarspam, verwaiste Metadaten.
- Autoloaded Options: Daten, die bei jedem Seitenaufruf geladen werden, auch wenn sie nicht verwendet werden.
- Fehlende Indizes: Abfragen, die die gesamte Tabelle scannen müssen (Full Table Scan).
- Tabellenfragmentierung: Lücken in den Daten, die die Dateigröße auf der Festplatte erhöhen.
Teil 1: Datenbankhygiene (Bereinigung)
Beginnen wir mit dem Entfernen des Mülls. Sie können dies mit einem Plugin (WP-Optimize) tun, aber als Entwickler sollten Sie wissen, wie man es “manuell” mit SQL oder WP-CLI erledigt.
1. Beitragsrevisionen (Post Revisions)
Jedes Mal, wenn Sie auf “Entwurf speichern” klicken, wird eine neue Kopie des Beitrags erstellt. Bei langen Bearbeitungssitzungen können Sie Hunderte von Revisionen für einen einzigen Artikel haben.
SQL-Abfrage zum Prüfen der Revisionsanzahl:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';
Löschen von Revisionen (SQL):
DELETE FROM wp_posts WHERE post_type = 'revision';
Empfohlen: Verwenden Sie WP-CLI (Sicherer):
wp post delete $(wp post list --post_type='revision' --format=ids) --force
2. Spam und Papierkorb löschen
Es macht keinen Sinn, Spam oder gelöschte Beiträge zu behalten.
SQL:
DELETE FROM wp_comments WHERE comment_approved = 'spam';
DELETE FROM wp_comments WHERE comment_approved = 'trash';
3. Transients (Temporäre Daten)
Transients sind Cache-Daten, die in der Datenbank (wp_options) gespeichert werden. Manchmal werden abgelaufene Transients nicht automatisch entfernt.
SQL zum Löschen abgelaufener Transients:
DELETE FROM wp_options WHERE option_name LIKE ('_transient_timeout%') OR option_name LIKE ('_transient_%');
WP-CLI (Beste Methode):
wp transient delete --all
Teil 2: Autoloaded Options (Der stille Leistungskiller)
Die Tabelle wp_options enthält eine Spalte autoload. Wenn diese auf yes gesetzt ist, wird diese Option bei jedem Seitenaufruf geladen.
Plugins hinterlassen hier oft Müll nach der Deinstallation.
Wie diagnostiziert man das Problem?
Prüfen Sie, wie viele Daten (in Bytes) automatisch geladen werden:
SELECT SUM(LENGTH(option_value)) as autoload_size FROM wp_options WHERE autoload = 'yes';
Wenn das Ergebnis 800 KB - 1 MB überschreitet, haben Sie ein Problem.
Wie findet man die größten Optionen?
SELECT option_name, LENGTH(option_value) as option_size
FROM wp_options
WHERE autoload = 'yes'
ORDER BY option_size DESC
LIMIT 10;
Sie werden hier oft alte Daten von Cache-Plugins, Buildern oder Logs finden. Wenn das Plugin nicht mehr verwendet wird, können Sie diese Optionen sicher löschen oder autoload auf no ändern.
Teil 3: InnoDB vs MyISAM
Im Jahr 2026 sollten Sie die MyISAM-Engine nicht mehr verwenden. InnoDB ist der Standard und bietet:
- Sperren auf Zeilenebene (Row-level locking): MyISAM sperrt die gesamte Tabelle beim Schreiben.
- ACID-Transaktionen: Datensicherheit.
- Fremdschlüssel: Konsistenz der Beziehungen.
Tabellen-Engine prüfen:
SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'ihr_datenbankname';
In InnoDB konvertieren:
Wenn Sie MyISAM-Tabellen finden, konvertieren Sie sie:
ALTER TABLE wp_posts ENGINE=InnoDB;
ALTER TABLE wp_comments ENGINE=InnoDB;
ALTER TABLE wp_options ENGINE=InnoDB;
-- und so weiter für alle Tabellen
Teil 4: Indizierung (Für Fortgeschrittene)
WordPress hat normalerweise gute Standardindizes, aber Plugins fügen oft eigene Tabellen ohne ordnungsgemäße Indizes hinzu. Ein fehlender Index bei einer WHERE- oder JOIN-Abfrage bedeutet, dass MySQL jede Zeile in der Tabelle scannen muss.
Beispiel: Langsame Suche in WooCommerce
Wenn Sie einen Shop mit 100.000 Bestellungen haben und ein Plugin Bestellungen nach meta_key ohne Index sucht, kann die Seite “Mein Konto” 10 Sekunden zum Laden benötigen.
Lösung: Fügen Sie Indizes zu Spalten hinzu, nach denen Sie häufig suchen oder sortieren.
CREATE INDEX idx_meta_key_value ON wp_postmeta (meta_key(191), meta_value(50));
(Hinweis: Indizierung von meta_value ist schwierig, da es TEXT ist. Vermeiden Sie die Suche nach meta_value, wenn möglich).
Teil 5: Prävention (Konfiguration der wp-config.php)
Statt ständig aufzuräumen, ist es besser, nicht zu verschmutzen. Konfigurieren Sie WordPress klug.
Revisionen begrenzen
Fügen Sie dies zur wp-config.php hinzu:
// Auf 5 letzte Versionen begrenzen
define( 'WP_POST_REVISIONS', 5 );
// Papierkorb alle 7 Tage leeren (Standard ist 30)
define( 'EMPTY_TRASH_DAYS', 7 );
// Autosave-Intervall erhöhen (weniger AJAX-Anfragen im Editor)
define( 'AUTOSAVE_INTERVAL', 300 ); // Sekunden
Dateieditor deaktivieren
Für Sicherheit und Hygiene:
define( 'DISALLOW_FILE_EDIT', true );
Teil 6: Überwachungstools (Query Monitor)
Raten Sie nicht, was die Seite verlangsamt. Installieren Sie das Plugin Query Monitor. Nach der Installation sehen Sie in der Admin-Leiste die Seitengenerierungszeit und die Anzahl der SQL-Abfragen.
- Klicken Sie auf die Statistiken in der Leiste.
- Gehen Sie zum Tab “Queries”.
- Sortieren Sie nach “Time”.
Wenn Sie eine Abfrage sehen, die 0,5s oder mehr dauert – das ist Ihr Optimierungsziel. Es stammt oft von einem schlecht geschriebenen Plugin (“Zuletzt angesehene Produkte”, “Besucherzähler” usw.).
Zusammenfassung: Optimierungs-Checkliste
- Backup: Machen Sie immer ein Backup, bevor Sie an der Datenbank arbeiten.
- Engine: Stellen Sie sicher, dass alle Tabellen InnoDB sind.
- Autoload: Prüfen Sie die Größe der
autoloaded options(Ziel < 800KB). - Bereinigung: Entfernen Sie Revisionen, Spam und abgelaufene Transients.
- Indizes: Prüfen Sie, ob schwere Abfragen Indizes verwenden.
- Prävention: Konfigurieren Sie
wp-config.php, um die Müllproduktion zu begrenzen.
Wenn Ihre Datenbank schlank und schnell ist, verbraucht PHP weniger Speicher und die Benutzer erhalten Inhalte sofort. Das ist die Grundlage für modernes WordPress.



