Czy w MySQL lepiej jest zawsze dopuszczać wartości null, chyba że wiesz, że pole jest wymagane, czy zawsze używać, 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
jak najwięcej, ponieważ zezwolenie na wartości null wymaga dodatkowego bitu (lub bajtu?) Na rekord do przechowywania statusu Null.
NULL
wtedy i tylko wtedy, gdyNULL
wartość ma interpretację rzeczy, którą modelujesz.Odpowiedzi:
W większości baz danych
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 zostać sprawdzone dla każdego wiersza, którego dotyczy zmiana za pomocą dowolnego WSTAWIANIA lub AKTUALIZACJI, ale ponieważ większość baz danych jest względnie lekka w pisaniu i obciążona odczytem, prawdopodobnie nie stanowi to problemu (małe dodatkowy czas nie będzie w ogóle zauważalny, 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 ci trochę „darmowego” "sprawdzanie danych, aby Twój kod (lub kod innej osoby) nie mógł 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 zauważa Peter w swoim komentarzu, powyższy jest generalizmem i może nie dotyczyć wszystkich DMBS, chociaż jestem całkiem 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.
źródło
Powinieneś pozwolić projektowi schematu i wymaganiom aplikacji kierować tą decyzją. W większości przypadków różnice w wydajności prawdopodobnie nie są zauważalne.
źródło