sql >> Databáze >  >> RDS >> Oracle

Nějaké nevýhody bitových příznaků ve sloupcích databáze?

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



  1. Jak nastavit řazení pro připojení v SQL Server?

  2. Porovnání výkonu virtuálních počítačů Windows Azure, část 1

  3. Výhody používání zápisu ordinální pozice SQL?

  4. Syntaxe SQL ALTER TABLE – Zobrazuje DBMS