sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad kostar CHECK-begränsningar i Postgres 9.x?

Vissa människor försöker undvika NULL värden, att hävda logiken skulle vara förvirrande.

Jag är inte en av dem. NULL värden är bra för kolumner utan data. De är definitivt det billigaste sättet att lagra "tomma" kolumner - för diskutrymme såväl som prestanda (huvudeffekten är mindre tabeller och index):

När du förstår arten av NULL värderingar finns det ingen anledning att undvika dem. Postgres erbjuder en mängd olika funktioner för att hantera NULLs. colaesce() , nullif() , concat() , concat_ws() , ...

I allmänhet när det gäller prestanda berörs, en NOT NULL-begränsning slår en KONTROLLERA begränsning och båda slår triggers av ett stockskott. Men även enkla triggers är billiga. Kostnaden för en NOT NULL begränsning är nästan ingenting. Alla dessa påverkar också bara skrivoperationer, men i de flesta applikationer dominerar läsoperationer.

Den mest relevanta effekten på prestanda (underoptimala index och frågor bortsett från) är därför storleken av tabeller och index eller, ännu viktigare, antalet tuplar per datasida . Större tupler leder till långsammare prestanda för de flesta användningsfall. Antalet datasidor som måste läsas för att tillfredsställa en fråga ökar i enlighet därmed. Tillgängligt cacheminne är mättat tidigare.

Jag har inget benchmark redo, men det är bäst att testa för just din miljö ändå. Detta är bara enkla tumregler. Verkligheten är mycket mer komplex.




  1. Kan inte släppa fält i MariaDB/MySql-tabellen med FOREIGN KEY

  2. Hur man gör en brevkoppling i Access 2016

  3. MySQL Ändra samling av alla tabeller

  4. Relationella vs icke-relationella databaser:Vad är skillnaden?