sql >> Databasteknik >  >> RDS >> Oracle

Några nackdelar med bitflaggor i databaskolumner?

Om du bara har en handfull roller sparar du inte ens något lagringsutrymme utrymme i PostgreSQL . Ett integer kolumnen använder 4 byte, en bigint 8 byte. Båda kan kräva justeringsutfyllnad:

  • Förstå Postgres radstorlekar
  • Beräkna och spara utrymme i PostgreSQL

En boolean kolumnen använder 1 byte. I praktiken kan du passa fyra eller fler booleska kolumner för ett integer kolumn, åtta eller fler för en bigint .

Tänk också på att NULL värden använder bara en bit (förenklat) i NULL-bitmappen.

Enskilda kolumner är lättare att läsa och indexera . Andra har redan kommenterat det.

Du kan fortfarande använda index på uttryck eller partiella index för att kringgå problem med index ("icke-sargable"). Generaliserade uttalanden som:

databasen kan inte använda index på en fråga som denna

eller

Dessa villkor är icke-SARG-bara!

är inte helt sanna - kanske för vissa andra RDBMS som saknar dessa funktioner.
Men varför kringgå när du kan undvika problemet helt och hållet?

Som du har förtydligat talar vi om 6 distinkta typer (kanske fler). Gå med individuell boolean kolumner. Du kommer förmodligen till och med att spara utrymme jämfört med en bigint . Utrymmesbehov verkar oväsentligt i det här fallet.

Om dessa flaggor var ömsesidigt uteslutande , kan du använda en kolumn av typen enum eller en liten uppslagstabell och en främmande nyckel som refererar till den. (Uteslutet i fråga om uppdatering.)



  1. Hur kör man ett SSIS-paket från .NET?

  2. Hur väljer man data mellan två datum från sqlite db i formatet dd-mm-åååå?

  3. Använd OBJECTPROPERTY() för att ta reda på om ett objekt är en CHECK-begränsning i SQL Server

  4. Välja en fristående fulltextsökserver:Sphinx eller SOLR?