Hvis du kun har en håndfuld roller, gemmer du ikke engang nogen lagerplads plads i PostgreSQL . Et integer
kolonne bruger 4 bytes, en bigint
8 bytes. Begge kan kræve justeringspolstring:
- Få mening med Postgres rækkestørrelser
- Beregning og pladsbesparelse i PostgreSQL
En boolean
kolonne bruger 1 byte. Du kan effektivt passe fire eller flere booleske kolonner til et integer
kolonne, otte eller mere for en bigint
.
Tag også højde for, at NULL
værdier bruger kun én bit (forenklet) i NULL bitmap.
Individuelle kolonner er nemmere at læse og indeksere . Andre har allerede kommenteret det.
Du kan stadig bruge indekser på udtryk eller delvise indekser for at omgå problemer med indekser ("ikke-sargable"). Generaliserede udsagn som:
databasen kan ikke bruge indekser på en forespørgsel som denne
eller
Disse betingelser er ikke-SARGbare!
er ikke helt sande - måske for nogle andre mangler RDBMS disse funktioner.
Men hvorfor omgå, når du kan undgå problemet helt?
Som du har præciseret, taler vi om 6 forskellige typer (måske flere). Gå med individuel boolean
kolonner. Du vil sandsynligvis endda spare plads sammenlignet med én bigint
. Pladsbehovet synes uvæsentligt i dette tilfælde.
Hvis disse flag var gensidigt udelukkende , kan du bruge én kolonne af typen enum
eller en lille opslagstabel og en fremmednøgle, der refererer til den. (Udelukket i spørgsmålsopdatering.)