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

Kolik místa na disku je potřeba k uložení hodnoty NULL pomocí postgresql DB?

Laramie má s bitmapou pravdu a odkazuje na správné místo v příručce. Přesto je to téměř, ale ne zcela správné:

Takže pro každý daný řádek s jednou nebo více hodnotami null by velikost přidaná k němu odpovídala velikosti bitmapy (N bitů pro tabulku s N-sloupci, zaokrouhleno nahoru).

Je třeba vzít v úvahu zarovnání dat. HeapTupleHeader (na řádek) je dlouhý 23 bajtů, skutečná data sloupce vždy začínají násobkem MAXALIGN (obvykle 8 bajtů). Zůstane tak jeden bajt výplně, který může nulová bitmapa využít. Ve skutečnosti je NULL úložiště pro tabulky do 8 sloupců zcela zdarma .

Poté další MAXALIGN (obvykle 8) bajtů je alokováno pro další MAXALIGN * 8 (obvykle 64) sloupců. atd. Vždy pro celkový počet uživatelských sloupců (vše nebo nic ). Ale pouze pokud je v řádku alespoň jedna skutečná hodnota NULL.

Provedl jsem rozsáhlé testy, abych to všechno ověřil. Další podrobnosti:

  • Nepoužívá v PostgreSQL stále v záhlaví bitmapu NULL?


  1. Jak načíst všechny řádky v mé DB?

  2. Výkon MySQL:Převod MySQL na MariaDB

  3. Převést „datetime“ na „datetime2“ v SQL Server (příklady T-SQL)

  4. Referenční alias v klauzuli WHERE