Ältere MySQL-Einträge effizient entfernen und nur die neuesten N behalten
Das Löschen aller bis auf die neuesten N Einträge in einer MySQL-Tabelle erfordert eine sorgfältige Abfragekonstruktion. Ein direkter Ansatz mit LIMIT
innerhalb einer DELETE
-Anweisung ist aufgrund der Einschränkungen von MySQL oft erfolglos.
Ein häufiger fehlerhafter Versuch sieht so aus:
<code class="language-sql">DELETE FROM `table` ORDER BY `id` ASC LIMIT ((SELECT COUNT(*) FROM `table`) - N);</code>
Dies schlägt fehl, da MySQL keine Unterabfragen direkt innerhalb der LIMIT
-Klausel zulässt.
Eine robuste Lösung verwendet eine verschachtelte Unterabfrage:
<code class="language-sql">DELETE FROM `table` WHERE `id` NOT IN ( SELECT `id` FROM ( SELECT `id` FROM `table` ORDER BY `id` DESC LIMIT 42 -- Replace 42 with your desired N ) AS `subquery` );</code>
Diese Methode wählt zunächst mithilfe einer inneren Unterabfrage die IDs der N neuesten Datensätze (in id
absteigender Reihenfolge) aus. Die äußere Abfrage löscht dann alle Datensätze, deren IDs nicht in dieser inneren Auswahl vorhanden sind. Dadurch bleiben effektiv nur die neuesten N Einträge erhalten.
Denken Sie daran, 42
durch den gewünschten Wert von N
zu ersetzen. Für eine optimale Leistung bei großen Datensätzen sind möglicherweise weitere Optimierungstechniken erforderlich. Entdecken Sie alternative Ansätze und erwägen Sie die Indizierung Ihrer id
-Spalte, um die Geschwindigkeit deutlich zu verbessern. Konsultieren Sie zusätzliche Ressourcen für erweiterte Lösungen, die auf spezifische Leistungsanforderungen zugeschnitten sind.
Das obige ist der detaillierte Inhalt vonWie lösche ich alle bis auf die neuesten N Datensätze in einer MySQL-Tabelle?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!