Nogle mennesker forsøger at undgå NULL
værdier, at påstå, at logikken ville være forvirrende.
Jeg er ikke en af dem. NULL
værdier er helt fine for kolonner uden data. De er bestemt den billigste måde at gemme "tomme" kolonner på - for diskplads såvel som ydeevne (hovedeffekten er mindre tabeller og indekser):
- Bruger ikke brug af NULL i PostgreSQL stadig en NULL bitmap i headeren?
- Forbedrer indstillingen "NOT NULL" på en kolonne i postgresql ydeevnen?
- Optager nullbare kolonner ekstra plads i PostgreSQL?
Når du forstår arten af NULL
værdier, er der ingen grund til at undgå dem. Postgres tilbyder en række funktioner til at håndtere NULLs. colaesce()
, nullif()
, concat()
, concat_ws()
, ...
Generelt hvad angår ydelse er bekymret, en IKKE NULL-begrænsning slår en tjek begrænsning og begge slår triggere ved et kugleskud. Men selv simple triggere er billige. Prisen for en NOT NULL
begrænsning er næsten ingenting. Alle disse påvirker også kun skriveoperationer, men i de fleste applikationer dominerer læseoperationer.
Den mest relevante indvirkning på ydeevnen (suboptimale indekser og forespørgsler til side) er derfor størrelsen af tabeller og indekser eller, endnu vigtigere, antallet af tuples pr. dataside . Større tupler fører til langsommere ydeevne i de fleste tilfælde. Antallet af datasider, der skal læses for at tilfredsstille en forespørgsel, stiger tilsvarende. Tilgængelig cachehukommelse er mættet tidligere.
Jeg har ikke et benchmark klar, men det er bedst at teste for netop dit miljø alligevel. Det er blot simple tommelfingerregler. Virkeligheden er meget mere kompleks.