Ältere MySQL-Einträge effizient entfernen: Nur die neuesten N behalten
MySQL unterstützt das Löschen von Datensätzen mit einer LIMIT
-Klausel in einer Unterabfrage nicht direkt. Für eine saubere Lösung können wir dies jedoch mithilfe verschachtelter Unterabfragen erreichen.
Angenommen, Sie müssen alle bis auf die aktuellsten N Einträge entfernen, sortiert nach der Spalte id
(absteigend). Dieser Ansatz vermeidet die häufige Gefahr, LIMIT
direkt in der DELETE
-Anweisung zu verwenden:
Die folgende Abfrage erreicht dies effektiv:
<code class="language-sql">DELETE FROM `table` WHERE id NOT IN ( SELECT id FROM ( SELECT id FROM `table` ORDER BY id DESC LIMIT N ) as latest_records );</code>
Diese Abfrage nutzt eine Unterabfrage (latest_records
), um die IDs der N neuesten Datensätze zu identifizieren. Die äußere DELETE
-Anweisung entfernt dann alle Zeilen, deren IDs nicht in diesem Satz enthalten sind.
Denken Sie daran, dass die Leistung abhängig von Ihrer spezifischen Tabellenstruktur und Ihrem Datenvolumen weiter optimiert werden kann. Erwägen Sie das Hinzufügen von Indizes zur Spalte id
, um erhebliche Leistungsverbesserungen zu erzielen.
Das obige ist der detaillierte Inhalt vonWie lösche ich mit SQL 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!