sql >> Database >  >> RDS >> Oracle

Zijn er nadelen aan bitvlaggen in databasekolommen?

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



  1. Proactieve SQL Server Health Checks, Deel 5:Wachtstatistieken

  2. SQL-netwerkinterfaces, fout:50 - Er is een runtime-fout voor de lokale database opgetreden. Kan geen automatische instantie maken

  3. ClassNotFoundException met PostgreSQL en JDBC

  4. Tabellen en schema's opnemen bij het weergeven van de identiteitskolommen in een SQL Server-database