sql >> Database >  >> RDS >> PostgreSQL

Herschrijft Postgres de hele rij bij update?

Het kiezen van c) van uw vragen:

Zoals @Craig al heeft uitgelegd , kolommen die "TOAST-able" zijn en groter zijn dan een bepaalde drempel, worden out-of-line opgeslagen in een speciale TOAST-tabel per tabel (aparte "relation forks", afzonderlijke bestanden op schijf). Dus een 5 MB bytea kolom zou grotendeels onaangeroerd blijven in een update als de kolom zelf niet wordt gewijzigd. De handleiding:

Vetgedrukte nadruk van mij.
De rij in de hoofdrelatievork wordt nog steeds gekopieerd en een dode rij blijft achter wanneer deze wordt bijgewerkt (ongeacht of er daadwerkelijk waarden zijn gewijzigd). Voor grote rijen kan de volgende oplossing de moeite waard zijn:

Maak een kleine aparte 1:1 tabel voor vaak gewijzigde vlaggen. Alleen de primaire sleutel (=tegelijkertijd buitenlandse sleutel) en de vaak gewijzigde vlaggen. Dit zou updates een stuk sneller maken en schijfruimte besparen - voor een initiële extra overhead en wat kosten voor query's die aan beide tabellen moeten worden gekoppeld (andere query's worden zelfs sneller). Meer over schijfruimtevereisten van tabelrijen:



  1. Een tijdstempel krijgen van aaneengeschakelde dag- en tijdkolommen

  2. com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:dubbele invoer '' voor sleutel 'PRIMARY'

  3. Beste manier om UTF8-tekenreeks in te korten op basis van bytelengte

  4. Salesforce-gegevens vertalen naar EDI-indeling