Heim >Datenbank >MySQL-Tutorial >Wie kann ich Millionen von Datenbankzeilen effizient nach ID in PostgreSQL löschen?

Wie kann ich Millionen von Datenbankzeilen effizient nach ID in PostgreSQL löschen?

Susan Sarandon
Susan SarandonOriginal
2025-01-24 11:46:09420Durchsuche

How Can I Efficiently Delete Millions of Database Rows by ID in PostgreSQL?

Hochleistungsdeletion von Millionen von PostgreSQL-Zeilen durch ID

Das Löschen von Millionen von Datenbankzeilen kann die Leistung stark beeinflussen. Dieser Artikel untersucht effiziente Strategien zum Entfernen von ungefähr zwei Millionen Zeilen aus einer PostgreSQL -Datenbank mithilfe einer Liste von IDs, die gemeinsame Engpässe behandeln.

Die Herausforderung:

Die Aufgabe beinhaltet das Löschen eines großen Datensatzes basierend auf einer bereitgestellten ID -Liste. Standardmethoden wie Stapeldeletion und

Klauselfragen erweisen sich für diese Skala häufig ineffizient. IN

Optimale Lösungen:

Der beste Ansatz hängt von mehreren Faktoren ab:

  • gleichzeitiger Zugriff: Das Fehlen von gleichzeitigen Schreibungen vereinfacht den Prozess erheblich.
  • Indexierung: vorübergehend unnötige Indizes (ohne diese entscheidenden für das Löschen) und den Wiederaufbau anschließend die Geschwindigkeit steigern.
  • Auslöser: Deaktivieren oder Entfernen von Triggern während des Deletionsprozesses kann die Leistung erheblich verbessern.
  • Fremdtasten: Verwalten Sie fremde Schlüsselbeziehungen sorgfältig; Betrachten Sie vorübergehende Deaktivierungen oder Änderungen, um die Löschung zu erleichtern.
  • autovacuum: Auslauf vorher kann die Leistung optimieren. VACUUM ANALYZE
  • In-Memory-Ansatz (für kleinere verbleibende Datensätze): Wenn die nach dem Löschen verbleibenden Daten wesentlich kleiner sind
Dies bewahrt fremde Schlüssel, Ansichten und andere Abhängigkeiten, was zu einer sauberen und optimierten Tabelle führt.
<code class="language-sql">BEGIN;
SET LOCAL temp_buffers = '1000MB';
CREATE TEMP TABLE tmp AS
SELECT t.*
FROM   tbl t
LEFT   JOIN del_list d USING (id)
WHERE  d.id IS NULL;  -- copy remaining rows
TRUNCATE tbl;             -- clear the table
INSERT INTO tbl SELECT * FROM tmp;        -- re-insert remaining data
COMMIT;</code>

  • vs. : DELETE Für kleinere Tabellen kann TRUNCATE schneller sein als , da es Auslöser und ausländische Schlüsselbeschränkungen beibehält. DELETE TRUNCATE
Schlüsselüberlegungen:

    Nur in Tabellen mit Fremdschlüsselreferenzen verwendet werden, es sei denn, alle Referenzentabellen werden ebenfalls gleichzeitig abgeschnitten.
  • TRUNCATE löst
  • nicht aus.
  • TRUNCATE Post-Deletion ON DELETE (oder
  • ) ist entscheidend, um den Speicherplatz zurückzugewinnen und die Tabellengröße zu optimieren.
  • VACUUM

Das obige ist der detaillierte Inhalt vonWie kann ich Millionen von Datenbankzeilen effizient nach ID in PostgreSQL löschen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn