Pokud máte jen hrstku rolí, neušetříte ani žádné úložiště prostoru v PostgreSQL . integer
sloupec používá 4 bajty, bigint
8 bajtů. Oba mohou vyžadovat odsazení zarovnání:
- Vysvětlení velikosti řádků Postgres
- Výpočet a úspora místa v PostgreSQL
boolean
sloupec používá 1 bajt. Efektivně můžete umístit čtyři nebo více booleovských sloupců na jedno integer
sloupec, osm nebo více pro bigint
.
Vezměte také v úvahu, že NULL
hodnoty používají pouze jeden bit (zjednodušeně) v bitmapě NULL.
Jednotlivé sloupce se lépe čtou a indexují . Ostatní se k tomu již vyjádřili.
Stále můžete používat indexy na výrazech nebo částečné indexy, abyste se vyhnuli problémům s indexy ("neproměnitelné"). Zobecněné výroky jako:
databáze nemůže používat indexy na dotaz, jako je tento
nebo
Tyto podmínky se nevztahují na SARG!
nejsou zcela pravdivé - možná pro některé další RDBMS postrádající tyto funkce.
Ale proč to obcházet, když se tomuto problému můžete úplně vyhnout?
Jak jste upřesnili, mluvíme o 6 odlišných typech (možná i více). Použijte individuální boolean
sloupců. Pravděpodobně dokonce ušetříte místo ve srovnání s jedním bigint
. Potřeba místa se v tomto případě zdá nepodstatná.
Pokud tyto příznaky se vzájemně vylučovaly , můžete použít jeden sloupec typu enum
nebo malá vyhledávací tabulka a cizí klíč, který na ni odkazuje. (Aktualizace byla vyloučena.)