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):
- Gebruikt het gebruik van NULL in PostgreSQL nog steeds een NULL-bitmap in de header?
- Verhoogt het instellen van "NOT NULL" voor een kolom in postgresql de prestaties?
- Neem nullable kolommen extra ruimte in beslag in PostgreSQL?
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.