sql >> Databáze >  >> RDS >> PostgreSQL

Přepíše Postgres při aktualizaci celý řádek?

Výběr c) z vašich otázek:

Jak již vysvětlil @Craig , sloupce, které jsou „možné TOAST“ a jsou větší než určitá prahová hodnota, jsou uloženy mimo řádek ve vyhrazené tabulce TOAST pro každou tabulku (samostatné „relační větve“, samostatné soubory na disku). Tedy 5 MB bytea sloupec by při aktualizaci zůstal většinou nedotčen, pokud by se samotný sloupec nezměnil. Příručka:

Tučné zdůraznění min.
Řádek ve větvi hlavní relace se stále zkopíruje a po aktualizaci zůstane mrtvý řádek (bez ohledu na to, zda se nějaké hodnoty skutečně změnily). U velkých řádků může platit následující řešení:

Vytvořte malou samostatnou tabulku 1:1 pro často měněné vlajky. Jen primární klíč (=cizí klíč zároveň) a často měněné příznaky. Aktualizace by tak byly mnohem rychlejší a ušetřilo by se místo na disku – pro počáteční extra režii a určité náklady na dotazy, které potřebují spojit obě tabulky (ostatní dotazy jsou ve skutečnosti rychlejší). Více o požadavcích na místo na disku pro řádky tabulky:



  1. Jak převést z varbinary na char/varchar v mysql

  2. Převod databáze Postgresql z SQL_ASCII obsahující smíšené typy kódování na UTF-8

  3. Úvod do uživatelsky definovaných funkcí v SQL Server

  4. Obecný jednoduchý SQL dotaz