Niektórzy ludzie starają się unikać NULL
wartości, twierdząc, że logika byłaby myląca.
Nie jestem jednym z nich. NULL
wartości są w porządku dla kolumn bez danych. Są z pewnością najtańszym sposobem na przechowywanie "pustych" kolumn - zarówno pod względem miejsca na dysku, jak i wydajności (główny efekt to mniejsze tabele i indeksy):
- Czy nie używasz NULL w PostgreSQL nadal używa bitmapy NULL w nagłówku?
- Czy ustawienie „NOT NULL” w kolumnie w postgresql zwiększa wydajność?
- Czy kolumny z wartościami null zajmują dodatkowe miejsce w PostgreSQL?
Gdy zrozumiesz charakter NULL
wartości, nie ma powodu, aby ich unikać. Postgres oferuje szereg funkcji do radzenia sobie z wartościami NULL. colaesce()
, nullif()
, concat()
, concat_ws()
, ...
Ogólnie rzecz biorąc, jeśli chodzi o wydajność dotyczy, ograniczenie NOT NULL pokonuje ograniczenie SPRAWDŹ i obaj pokonują wyzwalacze przez strzał z dziennika. Ale nawet proste wyzwalacze są tanie. Koszt NOT NULL
ograniczenie jest prawie nic. Ponadto wszystkie te czynniki mają wpływ tylko na operacje zapisu, ale w większości aplikacji dominują operacje odczytu.
Najistotniejszy wpływ na wydajność (pomijając nieoptymalne indeksy i zapytania) ma zatem rozmiar tabel i indeksów lub, co ważniejsze, liczba krotek na stronie danych . Większe krotki prowadzą do niższej wydajności w większości przypadków użycia. Odpowiednio wzrasta liczba stron danych, które muszą zostać odczytane, aby spełnić zapytanie. Dostępna pamięć podręczna jest nasycana wcześniej.
Nie mam gotowego testu porównawczego, ale i tak najlepiej jest przetestować go pod kątem konkretnego środowiska. To tylko proste zasady. Rzeczywistość jest o wiele bardziej złożona.