Ich nutze das WP-Optimize, um schnell die Datenbank zu berinigen.
Scheinbar haben einige Personen das Problem, dass ungenutzte Einträge in der postmeta Tabelle zurückbleiben. Ich habe dazu noch eine neue Option implementiert welche folgende 2 SQL Statements beinhaltet.
Suche wie viele Einträge unnötig sind:
SELECT count(`m`.`post_id`) as `amount` FROM `wp_postmeta` as `m` LEFT JOIN `wp_posts` as `p` ON `m`.`post_id`=`p`.`ID` WHERE `p`.`ID` IS NULL
Anzeige der Einträge:
SELECT `m`.`post_id` FROM `wp_postmeta` as `m` LEFT JOIN `wp_posts` as `p` ON `m`.`post_id`=`p`.`ID` WHERE `p`.`ID` IS NULL
Und das entfernen:
DELETE `m`.* FROM `wp_postmeta` as `m` LEFT JOIN `wp_posts` as `p` ON `m`.`post_id`=`p`.`ID` WHERE `p`.`ID` IS NULL
Wem das alles zu schwer ist, kann hier die modifizierte Version runterladen: wp-optimize
Die Versionsnummer und die Texte wurden nicht verändert, daher sind gewisse Texte nur auf Englisch vorhanden. Der Author wurde informiert und somit sollte dies möglichst bald eingepflegt sein.
Hallo Stefan,
danke für diesen Beitrag. Leider habe ich das Problem mit meinen Postmetadaten nicht lösen können, vielleicht hast Du ja noch eine Idee.
Insgesamt habe ich 33.000 Einträge, was etwa 23MB in meiner mysql Datei ausmacht. Das gros ist überflüssig, es stammt aus einem Test mit meinem Twitter-Account, der wiederum meine Handelsaktivitäten gepostet hat. So sind in gut einem Jahr 33.000 Posts entstanden. Diese habe ich für den relaunch der Seite gelöscht, die Daten sind aber immer noch im System.
Das Problem ist, dass sie nicht als verwaist erkannt werden. Weder von von Deinen Codezeilen, noch von gängigen DB-Cleanern. Somit werden Sie auch nicht gelöscht.
Hast Du eine Idee?
Gruß
Pierre
Hallo Pierre
Ja mein Script entfernt nur Ungenutztes. Grundsätzlich müsste man die Posts entfernen und danach die Metadaten löschen. Klar kann man auch direkt die Metadaten bereinigen und die Posts haben dann halt defekte Verlinkungen zu Metadaten.
Hier müsste man klar definieren was (Gegebenheit z.B. Post von Twitterplugin), wie weit zurück (von-bis) bereinigt werden darf, SQL Statement erstellen und ausführen. Keine grosse Herausforderung per SQL, aber man muss die Daten zuerst anschauen und dieses Statement spezifisch für den Fall erstellen. Daher kann ich hier auch nicht einfach ein „einfaches“ SQL Statement liefern.
Kompletter Aufwand sehe ich bei 30-60 Minuten, je nach wie viele Infos und Regeln greifen sollen.
Bei Interesse einfach melden.
Gruss
Stefan