it-swarm.com.de

Zurücksetzen/Neuanordnen der Posts-ID in der MySQL-Tabelle wp_posts

Ich habe eine Wordpress-Site, die sehr beliebt ist. Ich bin dabei, die Site zu optimieren, bevor ich andere Plugins wie das WPML-Plugin hinzufüge, von dem ich vermute, dass es benutzerdefinierte Beitragstypen verwendet. Die Site hat bereits andere Plugins, von denen ich nicht vermute, dass sie die Tabelle wp_posts für benutzerdefinierte Beitragstypen verwenden, mit Ausnahme von 1 oder 2, die nur erstellt werden sollen.

Ist es möglich, die ID-Spalte in der Tabelle wp_posts so neu zu erstellen/zu aktualisieren/neu zu ordnen, dass die Post-IDs ab 1 beginnen und lückenlos ansteigen.

Die Tabelle wp_posts enthält 3.349 Zeilen. Die Site enthält ungefähr 412 Beiträge (Beitragstyp) in der wordpress wp_posts-Tabelle. Die größte Zahl in der ID-Spalte ist 7060 (dies ist sehr groß), und jeder neue Beitrag, den ich hinzufüge, erhöht die Zahl auf 7061. Die restlichen Zeilen in der Tabelle sind andere Beitragstypen, z. B. Anhänge, von denen einige von alten erstellt wurden Plugins. Es gibt 2.786 Zeilen für den Anhangspostentyp, was eine sehr große Zahl ist, wenn man bedenkt, dass ich diese Anhänge nicht mehr verwenden werde. Die 412 Posts enthalten alle Informationen, die für die Site benötigt werden. Ich konvertiere die Bilder in Inline-SVG und Latex. Die meisten Bilder waren Zahlen. Nach all dem werde ich wahrscheinlich 412 Zeilen in der wp_posts-Tabelle haben.

Ich weiß, dass ich AUTO_INCREMENT mithilfe von auf 1 zurücksetzen kann. ALTER TABLE Tabellenname AUTO_INCREMENT = Wert;
Ich bin mir jedoch nicht sicher, wie ich die Post-IDs neu anordnen soll. Ich möchte sehen, welche Vorsichtsmaßnahmen ich beachten sollte, bevor ich dies versuche. Ich halte dies für wichtig, um die Post-IDs zu vereinfachen, da sie auf der gesamten Multi-Site verwendet werden. Wenn es eine Lösung gibt, die die gesamten Verweise auf die Posts in anderen Tabellen neu anordnen und aktualisieren könnte, wäre das großartig !.

Mir ist bewusst, dass dies eine MySQL-Funktion ist und ich mit AUTO_INCREMENT arbeiten muss.

Mir ist bekannt, dass andere Beitragstypen wie Anhänge möglicherweise eine übergeordnete ID enthalten, die auf die ursprünglichen Beiträge verweist. Ich mache mir keine Sorgen um Anhänge, weil ich die 2.786 Anhänge sowieso loswerden möchte.

Ich werde wahrscheinlich die Tags und Kategorien verlieren, aber die Vereinfachung der Post-IDs ist von entscheidender Bedeutung. Ich werde die Tags und Kategorien trotzdem neu erstellen. Gibt es eine gute Möglichkeit, diese festzuhalten?.

Gibt es noch andere Gefahren, über die ich mir Sorgen machen sollte? Da viele Skripte/Funktionen rund um die Hauptwebsite-Posts erstellt werden, möchte ich die Post-IDs an dieser Stelle so eindeutig wie möglich gestalten. Eine Lücke von 100 zu haben, ist für mich kein Einzelfall.

Ich hoffe jemand hat die perfekte Lösung dafür. Versuche ich eine sehr gefährliche Idee?

1
user3072613

Wenn Sie fortlaufende Nummern für Ihre Posts wünschen, verwenden Sie nicht die Post-ID-Spalte.

AUTO_INCREMENT soll eindeutige Nummern bereitstellen (und bei der Multi-Master-Replikation Split-Brains), es wird nie ohne Lücken bleiben, insbesondere nicht in WordPress (Revisionen, Autosaves, Seiten, Kontaktformulare, Galerien und eine Reihe anderer Plugins) und vor allem nicht mit InnoDB. Ein einfacher Transaktionsfehler/Rollback kann dazu führen, dass die Felder AUTO_INCREMENT milliardenfach inkrementiert werden, ohne dass eine einzelne Zeile eingefügt wird. Dies ist ein ganz normales Verhalten. Ich zitiere auch Tamas aus diesem Stapelüberlauf-Thread:

Sie sollten sich niemals auf die numerischen Merkmale von automatisch generierten Schlüsseln verlassen.

Aus Performance-Sicht ist das eigentlich egal. Eine BIGINT mit 412, eine BIGINT mit 7060 und eine BIGINT mit fünf Milliarden sind alles 64-Bit-Ganzzahlen.

Wenn Sie wirklich sequentielle IDs (für Ihr UX oder was auch immer) möchten, sollten Sie Ihre eigene, besser vorhersehbare und isolierte Nummerierungslogik verwenden.

2
kovshenin

Diese Beitrags-ID wird verwendet, um Daten von WordPress Core über viele verschiedene Tabellen hinweg zu verknüpfen, sowie was auch immer Plugins tun oder was auch immer das Thema tun mag. Es besteht auch die Möglichkeit, dass Links unterbrochen werden, wenn Ihre Website jemals ?p= -Permalinks verwendet hat. Also ja, das ist eine sehr gefährliche Idee.

Um Ihre Beitrags-IDs richtig zurückzusetzen, müssen Sie viel arbeiten, aber diese Arbeit wäre verschwendet. WordPress verwendet ein vorzeichenloses BIGINT für dieses Feld , das eine Obergrenze von 18.446.744.073.709.551.615 erreichen kann. Sie werden nie dort ankommen, mit oder ohne die "Lücken" zwischen den Beiträgen.

Außerdem müssen Sie jedes Mal, wenn WordPress eine Datenbankeintragung vornimmt, die Arbeit wiederholen, da WordPress keine Anstrengungen unternimmt, um die IDs in Ordnung zu halten, da Sie (fälschlicherweise) der Meinung sind, dass dies notwendig ist. Jedes Mal, wenn WordPress die Datenbank ändert, müssen Sie sie erneut bereinigen. Das ist viel Code, der geschrieben werden muss, um das System einzurichten, und viel CPU-Zeit, um es auszuführen.

0
s_ha_dum

Wenn Sie sich nur für die Posts interessieren, können Sie die Posts exportieren und in eine neue DB importieren. Ich bin mir nicht sicher, ob der eingebaute Exporteur die Post-IDs und Anhänge dafür speichert. Möglicherweise müssen Sie Ihre eigenen erstellen. Wenn Sie sich nur um den Post-Inhalt kümmern, sollte dies nicht zu schwierig sein.

Das Problem ist, dass Sie keine interne Software-ID als externe Kennung verwenden sollten, da dies nur gesundheitsschädlich ist. Wenn Sie eine eindeutige, leicht zu merkende Kennung benötigen, erstellen Sie einfach ein eigenes Metafeld und verwenden Sie es dafür.

0
Mark Kaplun