it-swarm-eu.dev

Ve výchozím nastavení NULL nebo NOT NULL?

V MySQL je lepší vždy povolit nuly, pokud nevíte, že je pole povinné, nebo vždy použijte Not Null pokud nevíte, že pole bude obsahovat nuly? Nebo na tom nezáleží?

Vím, že v některých DBMS říkají, že používají Not Null co nejvíce, protože povolení nulových hodnot vyžaduje pro uložení stavu Null další bit (nebo bajt?) na záznam.

41
BenV

Ve většině databází bude sloupec NOT NULL Efektivnější z hlediska uložených dat z důvodu, který uvedete, a také efektivnější dotazování a indexování - takže pokud nechcete povolit NULL ve sloupci, měli byste je výslovně zakázat. .

Bude to mít nepatrný dopad na výkon, protože další omezení NOT NULL Bude pravděpodobně nutné zkontrolovat pro každý řádek, který ovlivníte pomocí INSERT nebo UPDATE, ale protože většina databází je relativní pro zápis a pro čtení, je to pravděpodobně není to problém (málo času navíc bude pravděpodobně vůbec znatelné, protože se jedná o operaci vázanou na CPU, kde zbytek operace vložení/aktualizace bude vázán na IO, a tak mnohem významnější hrdlo lahve) a poskytuje vám „bezplatnou“ kontrolu dat, takže váš kód (nebo kód jiných lidí) nemůže náhodně umístit NULL tam, kde je jiný kód neočekává, a tak může v jejich přítomnosti poskytnout nesprávné výsledky.

Edit: Jak Peter ve svém komentáři zdůrazňuje, výše je obecnost a nemusí platit pro všechny DMBS, i když jsem si docela jistý, že to platí pro mysql a mssql. Mezi další komplikace v této oblasti mohou patřit funkce, jako jsou řídké tabulky (jako je implementováno například MSSQL 2008), které změní dynamiku výkonu (ne) nulovatelných sloupců.

25
David Spillett

Toto rozhodnutí byste měli nechat řídit návrhem schématu a požadavky na aplikaci. Rozdíly ve výkonu pravděpodobně nejsou ve většině případů patrné.

9