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

Faktor plnění pro sekvenční index, který je PK

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;



  1. Instalace softwaru Oracle Database 12c v systému Windows

  2. Jaké jsou výhody systému správy dat?

  3. Oracle kontingenční řádky do sloupců

  4. Instalace Laravel na Ubuntu s podporou Apache, MariaDB a PHP