Als je maar een handvol rollen hebt, bespaar je zelfs geen opslag ruimte in PostgreSQL . Een integer
kolom gebruikt 4 bytes, een bigint
8 bytes. Voor beide is mogelijk uitlijningspadding vereist:
- Betekenis van de rijgroottes van Postgres
- Ruimte berekenen en besparen in PostgreSQL
Een boolean
kolom gebruikt 1 byte. In feite kunt u vier of meer booleaanse kolommen passen voor één integer
kolom, acht of meer voor een bigint
.
Houd er ook rekening mee dat NULL
waarden gebruiken slechts één bit (vereenvoudigd) in de NULL-bitmap.
Afzonderlijke kolommen zijn gemakkelijker te lezen en index . Anderen hebben daar al commentaar op gegeven.
U kunt nog steeds indexen voor uitdrukkingen of gedeeltelijke indexen gebruiken om problemen met indexen te omzeilen ("niet-sargeerbaar"). Algemene uitspraken zoals:
database kan geen indexen gebruiken voor een zoekopdracht als deze
of
Deze voorwaarden zijn niet-SARGable!
zijn niet helemaal waar - misschien voor sommige anderen RDBMS die deze functies niet hebben.
Maar waarom omzeilen als u het probleem helemaal kunt vermijden?
Zoals je hebt verduidelijkt, hebben we het over 6 verschillende typen (misschien meer). Ga met individuele boolean
kolommen. Je bespaart waarschijnlijk zelfs ruimte in vergelijking met één bigint
. Ruimtebehoefte lijkt in dit geval niet van belang.
Als deze vlaggen waren onderling exclusief , je zou een . kunnen gebruiken kolom van het type enum
of een kleine opzoektabel en een refererende sleutel die ernaar verwijst. (Uitgesloten in kwestie van update.)