sql >> Databasteknik >  >> RDS >> PostgreSQL

Skriver Postgres om hela raden vid uppdatering?

Välj c) från dina frågor:

Som @Craig redan förklarat , kolumner som är "TOAST-able" och större än ett visst tröskelvärde lagras out-of-line i en dedikerad TOAST-tabell per tabell (separata "relationsforks", separata filer på disken). Alltså en 5 MB bytea kolumnen förblir mestadels orörd i en uppdatering om själva kolumnen inte ändras. Handboken:

Fet betoning min.
Raden i huvudrelationsgaffeln kopieras fortfarande och en död rad ligger kvar när den uppdateras (oavsett om några värden faktiskt har ändrats eller inte). För stora radstorlekar kan följande lösning betala sig:

Skapa en liten separat 1:1-tabell för ofta ändrade flaggor. Bara primärnyckeln (=främmande nyckel samtidigt) och de ofta ändrade flaggorna. Detta skulle göra uppdateringar mycket snabbare och bevara diskutrymme - för en initial extra omkostnad och viss kostnad för frågor som behöver ansluta till båda tabellerna (andra frågor blir faktiskt snabbare). Mer om diskutrymmeskrav för tabellrader:



  1. Vad betyder %Type i Oracle sql?

  2. Hur får jag ID för en rad som har MAX- och MIN-värden i SQL

  3. Varför återvänder pg_restore framgångsrikt men återställer inte min databas?

  4. Pandas:Hur man läser och skriver filer