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.)