FILLFACTOR
Pouze pomocí INSERT
a SELECT
měli byste použít FILLFACTOR
z 100
všude.
Nemá smysl opouštět wiggle prostor na paměťový blok, pokud se nechystáte "wiggle" pomocí UPDATE
s.
Mechanismus za FILLFACTOR
je velmi jednoduchý. INSERT
s pouze vyplnit každou datovou stránku (obvykle 8 kb bloky) až do procenta deklarovaného FILLFACTOR
nastavení. Také vždy, když spustíte VACUUM FULL
nebo CLUSTER
na stole je znovu zřízena stejná místnost pro pohyb v bloku. V ideálním případě to umožňuje UPDATE
s k ukládání nových verzí řádků na stejné datové stránce, což může poskytnout podstatné zvýšení výkonu při práci s velkým množstvím UPDATE
s. Prospěšné také v kombinaci sH.O.T. aktualizace :
Pokud existují ne aktualizace, neztrácejte místo a nastavte FILLFACTOR = 100
.
Základní zdroj informací:manuál na CREATE TABLE
nebo CREATE INDEX
.
Další optimalizace
Můžete ale udělat něco jiného - protože se zdá, že jste hlupák na optimalizaci ... :)
CREATE TABLE dev_transactions
( transaction_id serial PRIMARY KEY,
gateway integer NOT NULL,
moment timestamp NOT NULL,
transaction_type smallint NOT NULL,
status smallint NOT NULL,
device integer NOT NULL,
controler smallint NOT NULL,
token integer,
et_mode character(1));
Tím se optimalizuje tabulka s ohledem na zarovnání dat a vyhýbá se vyplňování pro typický 64bitový server a ušetří několik bajtů, pravděpodobně jen 8 bajtů v průměru – obvykle toho moc nevytlačíte pomocí "column tetris:
Také ponechte NOT NULL
sloupce na začátku tabulky za velmi malý výkonnostní bonus.
Vaše tabulka má také 9 sloupců . To znamená dalších 8 bajtů pro rozšířenou bitmapu NULL - která by se vešla do počáteční 1bajtové bitmapy NULL pro pouhých 8 sloupců .
Pokud definujete et_mode
a token
NOT NULL
, všechny sloupce jsou NOT NULL
a vůbec se použije bitmapa NULL, čímž se uvolní 8 bajtů.
To funguje i na řádek, pokud nedeklarujete sloupce NOT NULL
. Pokud mají všechny sloupce hodnoty, není pro tento řádek žádná bitová mapa NULL. Ve vašem případě to vede k paradoxnímu efektu, že vyplňování hodnot pro et_mode
a token
můžete velikost úložiště zmenšit nebo alespoň zůstat stejný:
Základní zdroj informací:manuál o fyzickém úložišti databáze .
Porovnejte velikost řádků (vyplněných hodnotami) s vaší původní tabulkou, abyste získali definitivní důkaz:
SELECT pg_column_size(t) FROM dev_transactions t;