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

Jaká je cena omezení CHECK v Postgres 9.x?

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):

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ší.




  1. PG::Error - přetečení číselného pole na Heroku

  2. SELECT s proměnnými dotazu, které nepoužívají INDEXy

  3. Vyhnout se duplicitním vložkám bez jedinečného omezení v cílové tabulce?

  4. Typ MySQL pro uložení roku:Smallint nebo Varchar nebo datum?