PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Schreibt Postgres beim Update die gesamte Zeile neu?

Auswahl von c) aus deinen Fragen:

Wie @Craig bereits erklärt , Spalten, die „TOAST-fähig“ sind und größer als ein bestimmter Schwellenwert sind, werden out-of-line in einer dedizierten TOAST-Tabelle pro Tabelle gespeichert (separate „Relation Forks“, separate Dateien auf der Festplatte). Also ein 5 MB großes bytea Spalte bei einem Update weitgehend unberührt bleiben würde, wenn die Spalte selbst nicht geändert wird. Das Handbuch:

Fette Hervorhebung von mir.
Die Zeile in der Hauptbeziehungsgabel wird immer noch kopiert und eine tote Zeile bleibt zurück, wenn sie aktualisiert wird (unabhängig davon, ob sich tatsächlich Werte geändert haben oder nicht). Bei großen Zeilengrößen kann sich die folgende Lösung auszahlen:

Erstellen Sie eine kleine separate 1:1-Tabelle für häufig geänderte Flaggen. Nur der Primärschlüssel (=zugleich Fremdschlüssel) und die häufig geänderten Flags. Dies würde Aktualisierungen viel schneller machen und Speicherplatz sparen - für einen anfänglichen zusätzlichen Overhead und einige Kosten für Abfragen, die beide Tabellen verbinden müssen (andere Abfragen werden tatsächlich schneller). Mehr über den Speicherplatzbedarf von Tabellenzeilen auf der Festplatte: