Zum Inhalt springen
BeoHosting
BeoHosting
WordPress

Leitfaden zu WordPress-Datenbanktabellen

BeoHosting Team··10 Min. Lesezeit Lesezeit
Leitfaden zu WordPress-Datenbanktabellen

Einführung in die WordPress-Datenbank

Die WordPress-CMS-Lösung verwendet eine MySQL- oder MariaDB-Datenbank zur Speicherung praktisch aller Inhalte Ihrer Website – von Posts und Pages bis zu Kommentaren, Benutzerdaten, Einstellungen und Plugin-Konfigurationen. Das Verständnis der Datenbankstruktur ist entscheidend für die fortgeschrittene Verwaltung einer WordPress-Website, die Problemlösung, Leistungsoptimierung und korrekte Backup-Erstellung. Jede WordPress-Installation erstellt 12 Standardtabellen, die zusammen ein vollständiges Content-Management-System bilden.

Das Standardpräfix für WordPress-Tabellen ist wp_, aber es wird aus Sicherheitsgründen empfohlen, das Präfix bei der Installation zu ändern, weil Angreifer, die SQL-Injection-Angriffe versuchen, häufig auf das Standardpräfix wp_ abzielen. Durch eine Änderung zu etwas wie bh29_ erschweren Sie automatisierte Angriffe. In diesem Leitfaden verwenden wir das Standardpräfix wp_ aus Gründen der Klarheit, aber beachten Sie, dass Ihre Website ein anderes Präfix verwenden kann.

wp_posts – das Herz von WordPress

Tabellenstruktur

Die Tabelle wp_posts ist die wichtigste Tabelle in der WordPress-Datenbank, weil sie alle Inhalte speichert, einschließlich Posts, Pages, angehängter Mediendateien, Revisionen, Menüpunkte und Custom Post Types. Jede Zeile in der Tabelle stellt ein Inhaltsobjekt mit Spalten wie ID, die der eindeutige Identifikator ist, post_author, der den Benutzer referenziert, der den Inhalt erstellt hat, post_date für das Erstellungsdatum, post_content für den Hauptinhalt im HTML-Format, post_title für den Titel, post_excerpt für die Kurzbeschreibung, post_status für den Status (publish, draft, pending, private, trash) und post_type für den Inhaltstyp dar.

Post-Typen in wp_posts

Die Spalte post_type bestimmt die Art des Inhalts. Der Wert post bezeichnet Blog-Posts, page bezeichnet Pages, attachment bezeichnet hochgeladene Mediendateien, revision speichert frühere Versionen des Inhalts, nav_menu_item speichert Navigationsmenü-Einträge und Custom Post Types haben ihren eigenen Slug. Das bedeutet, dass Sie in derselben Tabelle Tausende von Posts, Hunderte von Pages, Tausende von Mediendateien und Zehntausende von Revisionen haben können. Revisionen sind eine häufige Ursache für das Aufblähen der Datenbank, weil WordPress standardmäßig eine unbegrenzte Anzahl von Revisionen für jeden Post speichert.

Optimierung von wp_posts

Begrenzen Sie die Anzahl der Revisionen durch Hinzufügen der Konstante WP_POST_REVISIONS in wp-config.php. Der Wert 5 speichert die letzten 5 Revisionen für jeden Post, was für die meisten Websites ausreichend ist. Löschen Sie regelmäßig alte Revisionen, Auto-Draft-Posts und gelöschte Posts aus dem Papierkorb mit dem WP-Optimize-Plugin oder einer direkten SQL-Abfrage. Für Websites mit einer großen Anzahl von Posts beschleunigt die Indexierung der post_type- und post_status-Spalten Abfragen. Wenn Sie Custom Post Types mit WP_Query verwenden, geben Sie immer den post_type in der Abfrage an, um das Scannen der gesamten Tabelle zu vermeiden.

wp_postmeta – Metadaten des Inhalts

Struktur und Zweck

Die Tabelle wp_postmeta speichert zusätzliche Daten über den Inhalt, die nicht von den Spalten in wp_posts abgedeckt werden. Die Struktur ist ein EAV-Modell (Entity-Attribute-Value) mit vier Spalten – meta_id, post_id, das wp_posts referenziert, meta_key, das der Name des Metadatums ist, und meta_value, das der Wert ist. Diese Tabelle ist der Ort, an dem ACF (Advanced Custom Fields) alle benutzerdefinierten Felder speichert, an dem WooCommerce Preise und Produkteigenschaften speichert und an dem WordPress die Featured-Image-ID, Template-Datei, serialisierte Daten und vieles mehr speichert.

Problem mit wp_postmeta

Die Tabelle wp_postmeta ist die häufigste Ursache für Leistungsprobleme, weil sie sehr schnell wächst. Jeder Post kann Dutzende oder Hunderte von Metadaten haben. ACF fügt mindestens zwei Zeilen pro Feld hinzu (Wert und Referenz), WooCommerce fügt 20 bis 50 Metadaten pro Produkt hinzu, und jedes Plugin kann eigene Metadaten hinzufügen. Eine Website mit 1.000 Posts kann leicht 100.000 oder mehr Zeilen in wp_postmeta haben. Ein fehlender oder suboptimaler Index auf der meta_key-Spalte ist eine häufige Ursache für langsame Abfragen.

Optimierung von wp_postmeta

Fügen Sie einen Index auf der meta_key-Spalte hinzu, falls nicht vorhanden, weil der WordPress-Standardindex auf dieser Spalte eine begrenzte Länge hat. Verwenden Sie WP-Optimize oder Advanced Database Cleaner, um Orphan-Metadaten zu identifizieren und zu löschen, die zu gelöschten Posts gehören. Für häufige meta_query-Abfragen ziehen Sie die Erstellung einer benutzerdefinierten Tabelle anstelle von wp_postmeta in Betracht, weil eine benutzerdefinierte Tabelle mit spezifischen Spalten viel schneller ist als das EAV-Modell. Vermeiden Sie das Speichern großer serialisierter Arrays in meta_value, weil sie nicht effizient durchsucht werden können.

wp_options – Website-Einstellungen

Struktur und Inhalt

Die Tabelle wp_options speichert alle WordPress-Website-Einstellungen einschließlich Website-Name, URL, Administrator-E-Mail, aktives Theme, aktive Plugins, Permalink-Struktur, Zeitzone und Hunderte anderer Einstellungen. Jedes Plugin und Theme kann eigene Zeilen in wp_options zur Speicherung der Konfiguration hinzufügen. Die Spalte autoload mit dem Wert yes oder no bestimmt, ob eine Option bei jeder Anfrage automatisch geladen wird oder nur, wenn sie spezifisch angefordert wird.

Autoload-Problem

WordPress lädt alle Optionen mit autoload=yes bei jeder Anfrage in den Speicher. Wenn Sie viele Plugins haben, kann diese Tabelle Hunderte von autoloaded Optionen mit einer Gesamtgröße von mehreren Megabyte haben. Dies verbraucht RAM und verlangsamt jede Anfrage, sogar für Seiten, die diese Optionen nicht verwenden. Prüfen Sie die Gesamtgröße der autoloaded Optionen mit einer SQL-Abfrage, die die Größe von option_value für alle Zeilen mit autoload=yes summiert. Wenn das Ergebnis 1 MB übersteigt, haben Sie ein Problem, das gelöst werden muss.

Bereinigung von wp_options

Entfernte Plugins lassen oft ihre Optionen in der Tabelle, weil WordPress keinen automatischen Bereinigungsmechanismus hat. Transient-Daten, die ein temporärer Cache sind, werden in wp_options mit Schlüsseln gespeichert, die mit _transient_ beginnen, und können Tausende von Zeilen ansammeln. Verwenden Sie ein Plugin wie Advanced Database Cleaner, um Optionen gelöschter Plugins und veraltete Transients zu identifizieren. Manuell können Sie autoload für selten verwendete Optionen mit einer SQL-Abfrage in phpMyAdmin auf no ändern, aber seien Sie vorsichtig, dass Sie keine Core-WordPress-Optionen ändern.

wp_users und wp_usermeta

Benutzerdaten

Die Tabelle wp_users speichert grundlegende Benutzerdaten einschließlich ID, user_login für den Benutzernamen, user_pass für das gehashte Passwort, user_nicename für die URL-freundliche Version des Namens, user_email, user_url für die Website des Benutzers, user_registered für das Registrierungsdatum, user_activation_key für die Kontoaktivierung und user_status. WordPress verwendet phpass-Hashing für Passwörter mit anpassbarer Iterationszahl zum Schutz vor Brute-Force-Angriffen auf Hashes.

User-Meta-Daten

Die Tabelle wp_usermeta hat dieselbe EAV-Struktur wie wp_postmeta und speichert zusätzliche Benutzerdaten wie die Benutzerrolle in wp_capabilities, das Zugangslevel in wp_user_level, Admin-Panel-Präferenzen, Dashboard-Widget-Layout und alle benutzerdefinierten Benutzerfelder. WooCommerce fügt die Liefer- und Rechnungsadresse als User-Meta hinzu. Membership- und LMS-Plugins können Dutzende von Metadaten pro Benutzer hinzufügen. Für Websites mit vielen Benutzern kann wp_usermeta eine sehr große Tabelle werden.

Tabellen für Kommentare und Links

wp_comments und wp_commentmeta

Die Tabelle wp_comments speichert alle Kommentare zu Posts mit Spalten für Kommentar-ID, post_id zur Verknüpfung mit dem Post, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_content, comment_approved für den Genehmigungsstatus, comment_parent für Antworten auf Kommentare und user_id für registrierte Benutzer. Spam-Kommentare werden mit comment_approved=spam markiert, bleiben aber in der Tabelle, bis Sie sie löschen. Akismet und ähnliche Anti-Spam-Tools verwenden wp_commentmeta zur Speicherung von Spam-Scores und anderen Metadaten.

wp_terms, wp_termmeta und wp_term_taxonomy

WordPress verwendet drei Tabellen für Taxonomien. Die Tabelle wp_terms speichert die Begriffe selbst mit ID, name für den Namen, slug für die URL und term_group zur Gruppierung. Die Tabelle wp_term_taxonomy verbindet Begriffe mit Taxonomien und speichert den taxonomy-Typ, description, parent ID für die Hierarchie und count für die Anzahl der Posts. Die Tabelle wp_term_relationships ist eine Verknüpfungstabelle, die Posts mit Begriffen über die Spalten object_id für die Post-ID und term_taxonomy_id verbindet. Die Tabelle wp_termmeta fügt die Möglichkeit hinzu, Metadaten für Begriffe wie Kategoriebild oder Farbe zu speichern.

Optimierung der WordPress-Datenbank

Regelmäßige Wartung

Die WordPress-Datenbank erfordert regelmäßige Wartung für optimale Leistung. Wichtige Aktionen umfassen das Löschen von Post-Revisionen, die älter als 30 Tage sind, das Bereinigen von Auto-Draft- und Trashed-Posts, das Löschen von Spam- und Trashed-Kommentaren, das Entfernen abgelaufener Transients aus wp_options, die Optimierung von Tabellen mit dem Befehl OPTIMIZE TABLE und die Überprüfung der Tabellenintegrität mit CHECK TABLE. Das WP-Optimize-Plugin automatisiert alle diese Operationen mit der Möglichkeit, wöchentliche oder monatliche Bereinigungen zu planen.

Indizes und Leistung

Indizes sind entscheidend für schnellere Datenbankabfragen. WordPress erstellt Standardindizes, aber für Websites mit einer großen Anzahl von Posts oder benutzerdefinierten Abfragen können zusätzliche Indizes die Leistung erheblich verbessern. Verwenden Sie EXPLAIN vor einer SQL-Abfrage in phpMyAdmin, um zu sehen, ob die Abfrage Indizes verwendet oder einen Full Table Scan durchführt. Für häufige meta_query-Abfragen auf einem spezifischen meta_key fügen Sie einen zusammengesetzten Index auf den post_id- und meta_key-Spalten in wp_postmeta hinzu. Das Query Monitor WordPress-Plugin zeigt alle SQL-Abfragen auf der Seite mit Ausführungszeiten an und identifiziert langsame Abfragen.

Datenbankgröße

Verfolgen Sie die Datenbankgröße regelmäßig, weil eine aufgeblähte Datenbank Backups, Migrationen und tägliche Operationen verlangsamt. Ein durchschnittlicher WordPress-Blog sollte eine Datenbank kleiner als 100 MB haben. Wenn Ihre Datenbank größer als 500 MB ist, haben Sie wahrscheinlich ein Problem mit Revisionen, Transients oder Plugin-Daten. WooCommerce-Websites mit vielen Produkten und Bestellungen haben natürlicherweise größere Datenbanken, aber auch dann sollten Sie veraltete Daten bereinigen. Bei BeoHosting kommen unsere Hosting-Pakete mit ausreichend Platz für die Datenbank, aber eine optimierte Datenbank bedeutet eine schnellere Website für Ihre Besucher.

Backup der WordPress-Datenbank

Backup-Methoden

Es gibt mehrere Möglichkeiten, ein Backup der WordPress-Datenbank zu erstellen. Die phpMyAdmin-Export-Funktion ermöglicht den manuellen Download einer SQL-Dump-Datei mit allen Tabellen und Daten. Der WP-CLI-Befehl wp db export erstellt eine Dump-Datei über die Kommandozeile, was für die Automatisierung geeignet ist. WordPress-Plugins wie UpdraftPlus, BackWPup und All-in-One WP Migration bieten automatisierte geplante Backups mit Upload zu Cloud-Speicher wie Google Drive, Dropbox oder Amazon S3. Bei BeoHosting erstellen wir automatische tägliche Backups des gesamten Hosting-Kontos einschließlich der Datenbank mit der Möglichkeit der Wiederherstellung mit einem Klick in cPanel.

Best Practices für Backups

Erstellen Sie ein Backup vor jedem Update von WordPress, Theme oder Plugin. Speichern Sie Backups an mehreren Standorten, nicht nur auf demselben Server. Testen Sie die Backup-Wiederherstellung periodisch auf einer Staging-Umgebung, um zu bestätigen, dass die Backups korrekt sind. Automatisieren Sie tägliche Backups mit einer Aufbewahrungsrichtlinie von mindestens 30 Tagen. Für E-Commerce-Websites mit häufigen Transaktionen ziehen Sie Backups alle 6 oder 12 Stunden in Betracht. Verschlüsseln Sie Backups, die sensible Daten wie Benutzerinformationen oder Zahlungsinformationen enthalten.

Fortgeschrittene Themen

Multisite-Tabellen

Eine WordPress-Multisite-Installation erstellt zusätzliche Tabellen zur Verwaltung des Netzwerks von Websites. Die Tabelle wp_blogs enthält Informationen über jede Website im Netzwerk, wp_site speichert Daten über das Netzwerk und wp_sitemeta speichert Metadaten des Netzwerks. Jede Website im Netzwerk erhält ihren eigenen Satz von Tabellen mit einem Präfix, das die Website-ID enthält, wie wp_2_posts für die zweite Website, wp_3_options für die dritte Website und so weiter. Das bedeutet, dass eine Multisite-Installation mit 10 Websites über 120 Tabellen in der Datenbank hat.

Benutzerdefinierte Tabellen

Für Plugins und Themes mit spezifischen Datenanforderungen ist die Erstellung benutzerdefinierter Tabellen oft besser als die Verwendung von wp_postmeta. Eine benutzerdefinierte Tabelle mit spezifischen Spalten und Indizes ist für Abfragen dramatisch schneller als das EAV-Modell in wp_postmeta. Verwenden Sie die WordPress-dbDelta-Funktion zum Erstellen und Aktualisieren benutzerdefinierter Tabellen, weil sie automatisch die vorhandene Struktur mit der gewünschten vergleicht und nur die erforderlichen Änderungen anwendet. Registrieren Sie die Plugin-Aktivierung mit register_activation_hook zum Erstellen von Tabellen bei der Plugin-Installation und stellen Sie einen Deinstallations-Hook zur Bereinigung beim Löschen des Plugins bereit.

Fazit

Das Verständnis der WordPress-Datenbanktabellen ist grundlegendes Wissen für jeden ernsthaften WordPress-Administrator und -Entwickler. Die Tabellen wp_posts und wp_postmeta speichern alle Inhalte, wp_options speichert die Konfiguration und wp_users und wp_usermeta speichern Benutzerdaten. Regelmäßige Datenbankwartung durch Löschen unnötiger Revisionen, Transients und Orphan-Daten hält die Website schnell. Richtige Indexierung beschleunigt Abfragen, und regelmäßige Backups sichern Daten vor Verlust. Bei BeoHosting bieten unsere optimierten MySQL-Server und automatischen Backups eine zuverlässige Grundlage für Ihre WordPress-Website mit Support, der Datenbanken von innen heraus versteht.

BeoHosting Team

10+ Jahre Erfahrung — Spezialisten für Webhosting und Infrastruktur

  • Web Hosting
  • WordPress Hosting
  • VPS
  • Dedicated Serveri
  • Domeni
  • SSL
  • cPanel
  • LiteSpeed
  • Linux administracija
  • DNS

Zuletzt aktualisiert: