So löschen Sie viele Zeilen aus der Tabelle, auf die häufig zugegriffen wird

Ich muss die Mehrheit (z. B. 90%) einer sehr großen Tabelle (z. B. 5 m Zeilen) löschen. Die anderen 10% dieser Tabelle werden häufig gelesen, aber nicht geschrieben.

Von "Beste Möglichkeit, Millionen von Zeilen nach ID zu löschen ", Ich habe festgestellt, dass ich jeden Index für die zu löschenden 90% entfernen sollte, um den Vorgang zu beschleunigen (mit Ausnahme eines Indexes, mit dem ich die zu löschenden Zeilen auswähle).

Von "PostgreSQL-Sperrmodus ", Ich sehe, dass diese Operation ein @ erhäROW EXCLUSIVE Sperre für den gesamten Tisch. Aber da bin ich nurlese die anderen 10%, das sollte keine Rolle spielen.

So ist es sicher, alles in einem Befehl zu löschen (d. H.DELETE FROM table WHERE delete_flag='t')? Ich mache mir Sorgen, dass, wenn das Löschen einer Zeile fehlschlägt, ein @ ausgelöst wirenor rollback, dann wird es meine Fähigkeit beeinträchtigen, aus der Tabelle zu lesen. Wäre es sinnvoller, stapelweise zu löschen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage