sql >> Database teknologi >  >> RDS >> Oracle

Eventuelle ulemper ved bitflag i databasekolonner?

Hvis du kun har en håndfuld roller, gemmer du ikke engang nogen lagerplads plads i PostgreSQL . Et integer kolonne bruger 4 bytes, en bigint 8 bytes. Begge kan kræve justeringspolstring:

  • Få mening med Postgres rækkestørrelser
  • Beregning og pladsbesparelse i PostgreSQL

En boolean kolonne bruger 1 byte. Du kan effektivt passe fire eller flere booleske kolonner til et integer kolonne, otte eller mere for en bigint .

Tag også højde for, at NULL værdier bruger kun én bit (forenklet) i NULL bitmap.

Individuelle kolonner er nemmere at læse og indeksere . Andre har allerede kommenteret det.

Du kan stadig bruge indekser på udtryk eller delvise indekser for at omgå problemer med indekser ("ikke-sargable"). Generaliserede udsagn som:

databasen kan ikke bruge indekser på en forespørgsel som denne

eller

Disse betingelser er ikke-SARGbare!

er ikke helt sande - måske for nogle andre mangler RDBMS disse funktioner.
Men hvorfor omgå, når du kan undgå problemet helt?

Som du har præciseret, taler vi om 6 forskellige typer (måske flere). Gå med individuel boolean kolonner. Du vil sandsynligvis endda spare plads sammenlignet med én bigint . Pladsbehovet synes uvæsentligt i dette tilfælde.

Hvis disse flag var gensidigt udelukkende , kan du bruge én kolonne af typen enum eller en lille opslagstabel og en fremmednøgle, der refererer til den. (Udelukket i spørgsmålsopdatering.)



  1. Hvordan angives et portnummer i SQL Server-forbindelsesstrengen?

  2. Find nærmeste dato i SQL Server

  3. Vil du først oprette lagrede procedurer ved hjælp af Entity Framework Code?

  4. Tilslutning til lokal SQL Server-database ved hjælp af C#