it-swarm.dev

Domyślnie NULL czy NOT NULL?

W MySQL lepiej jest zawsze dopuszczać wartości null, chyba że wiesz, że pole jest wymagane, lub zawsze używaj Not Null chyba że wiesz, że pole będzie zawierać wartości null? Czy to nie ma znaczenia?

Wiem, że w niektórych systemach DBMS mówi się, że używają Not Null tyle, ile to możliwe, ponieważ zezwolenie na wartości null wymaga dodatkowego bitu (lub bajtu?) na rekord do przechowywania statusu Null.

41
BenV

W większości baz danych a NOT NULL kolumna będzie bardziej wydajna pod względem przechowywanych danych z podanego powodu, a także bardziej wydajna w wyszukiwaniu i indeksowaniu - więc jeśli nie chcesz zezwalać na wartości NULL w kolumnie, powinieneś je wyraźnie zabronić.

Będzie to miało niewielki wpływ na wydajność, ponieważ dodatkowe NOT NULL ograniczenia będą potencjalnie musiały być sprawdzane dla każdego wiersza, którego dotyczy zmiana za pomocą INSERT lub UPDATE, ale ponieważ większość baz danych jest względnie łatwa do zapisu i bardzo obciążona odczytem, ​​prawdopodobnie nie stanowi to problemu (mało czasu poświęconego na to jest zauważalne przy w każdym razie, ponieważ jest to operacja związana z procesorem, w której reszta operacji wstawiania/aktualizacji będzie związana z operacjami we/wy, a więc o wiele bardziej znaczącym „wąskim gardłem” i daje pewne „bezpłatne” sprawdzanie danych, więc kod (lub inny) kod osoby) nie może przypadkowo umieścić wartości NULL tam, gdzie inny kod ich nie oczekuje, a zatem może dawać nieprawidłowe wyniki w ich obecności.

Edycja: Jak Peter wskazuje w swoim komentarzu, powyższe jest generalizmem i może nie być prawdziwe dla wszystkich DMBS, chociaż jestem prawie pewien, że tak jest w przypadku mysql i mssql. Inne komplikacje w tym obszarze mogą obejmować takie funkcje, jak rzadkie tabele (na przykład zaimplementowane MSSQL 2008), które zmienią dynamikę wydajności (nie) zerowalnych kolumn.

25
David Spillett

Powinieneś pozwolić projektowi schematu i wymaganiom aplikacji kierować tą decyzją. Różnice w wydajności prawdopodobnie nie są zauważalne w większości przypadków.

9