sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvad koster CHECK-begrænsninger i Postgres 9.x?

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):

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.




  1. Sådan bruger du understrengsfunktionen i PostgreSQL og Redshift

  2. Gruppér rækker, hvis de har overlappende tidsintervaller

  3. MySQL AS søgeord

  4. Problemer med at bruge MySQL med AWS Lambda i Python