sql >> Database >  >> RDS >> PostgreSQL

Wat zijn de kosten van CHECK-beperkingen in Postgres 9.x?

Sommige mensen proberen NULL te vermijden waarden, het zou verwarrend zijn om de logica te claimen.

Ik ben niet een van hen. NULL waarden zijn prima voor kolommen zonder gegevens. Ze zijn zeker de goedkoopste manier om "lege" kolommen op te slaan - zowel voor schijfruimte als voor prestaties (met als belangrijkste effect kleinere tabellen en indices):

Zodra je het begrijpt de aard van NULL waarden, is er geen reden om ze te vermijden. Postgres biedt een verscheidenheid aan functies om met NULL's om te gaan. colaesce() , nullif() , concat() , concat_ws() , ...

Over het algemeen, voor zover prestaties betreft, een NIET NULL-beperking overtreft een CHECK-beperking en beide verslaan triggers door een logshot. Maar zelfs eenvoudige triggers zijn goedkoop. De kosten van een NOT NULL beperking is bijna niets. Ook hebben deze allemaal alleen invloed op schrijfbewerkingen, maar in de meeste toepassingen domineren leesbewerkingen.

De meest relevante impact op de prestaties (afgezien van suboptimale indexen en zoekopdrachten) is daarom de grootte van tabellen en indices of, nog belangrijker, het aantal tuples per gegevenspagina . Grotere tuples leiden in de meeste gevallen tot tragere prestaties. Het aantal gegevenspagina's dat moet worden gelezen om aan een zoekopdracht te voldoen, neemt dienovereenkomstig toe. Het beschikbare cachegeheugen is eerder verzadigd.

Ik heb geen benchmark klaar, maar het is toch het beste om te testen voor uw specifieke omgeving. Dit zijn slechts eenvoudige vuistregels. De werkelijkheid is veel complexer.




  1. Hoe een getal met voorloopnullen op te vullen in MariaDB

  2. Het omzetten van MyISAM naar InnoDB. Voordelig? Gevolgen?

  3. Selecteer CIDR dat binnen het IP-bereik valt

  4. [archiver] niet-ondersteunde versie (1.13) in de bestandskop krijgen bij het uitvoeren van pg_restore