Někteří lidé se snaží vyhnout NULL
hodnoty, tvrzení o logice by bylo matoucí.
Já mezi ně nepatřím. NULL
hodnoty jsou v pořádku pro sloupce bez dat. Jsou určitě nejlevnějším způsobem ukládání „prázdných“ sloupců – pro místo na disku i pro výkon (hlavním efektem jsou menší tabulky a indexy):
- Neužívá se při použití NULL v PostgreSQL stále bitmapa NULL v záhlaví?
- Zvýší nastavení "NOT NULL" u sloupce v postgresql výkon?
- Zabírají sloupce s možnou hodnotou Null další prostor v PostgreSQL?
Jakmile porozumíte povaha NULL
hodnot, není důvod se jim vyhýbat. Postgres nabízí řadu funkcí pro práci s hodnotami NULL. colaesce()
, nullif()
, concat()
, concat_ws()
, ...
Obecně, pokud jde o výkon se týká NOT NULL omezení překonává omezení CHECK a oba porazili spouštěče výstřelem klády. Ale i jednoduché spouštěče jsou levné. Cena NOT NULL
omezení je téměř nic. Všechny tyto také ovlivňují pouze operace zápisu, ale ve většině aplikací dominují operace čtení.
Nejrelevantnější dopad na výkon (není optimální indexy a dotazy) má proto velikost tabulek a indexů nebo, což je důležitější, počet n-tic na datovou stránku . Větší n-tice vedou k pomalejšímu výkonu pro většinu případů použití. Počet datových stránek, které je třeba přečíst, aby bylo vyhověno dotazu, se odpovídajícím způsobem zvyšuje. Dostupná mezipaměť je nasycena dříve.
Nemám připravený benchmark, ale stejně je nejlepší testovat pro vaše konkrétní prostředí. To jsou jen jednoduchá pravidla. Realita je mnohem složitější.