sql >> Database teknologi >  >> RDS >> PostgreSQL

Er det muligt at gemme et 1 byte nummer i Postgres?

Forudsat at overhead for enhver række i PostgreSQL er 23 bytes (HeapTupleHeaderData), hvis du virkelig bekymrer dig om små mængder plads så meget, har du sandsynligvis valgt den forkerte måde at gemme dine data på.

Uanset, da alle de mere komplicerede typer har deres egen overhead (bytea tilføjer fire bytes overhead, f.eks. bitstrenge 5 til 8), er den eneste måde at opnå det, du leder efter, ved at bruge en bigint (8 bytes), numerisk forskydning af hver værdi og ELLER-sammenligning af resultatet. Du kan gøre dette ved at bruge bitstrengoperationerne for at gøre koden nemmere--beregn som bitstreng, cast derefter til bigint før lagring--eller bare manuelt multiplicer/tilføj, hvis du ønsker at hastigheden skal være bedre. Sådan gemmer du f.eks. to bytes sammen i en struktur på to bytes og derefter får dem tilbage igen:

int2 = 256 * byte1 + byte2
byte1 = int2 / 256
byte2 = int2 % 256

Du kan udvide den samme idé til at gemme 7 af dem på den måde. Hentning overhead vil stadig være forfærdeligt, men du vil faktisk have sparet noget plads i processen. Men ikke ret meget i forhold til kun rækkeoverskriften.



  1. Hvilken JDBC-drivertype skal jeg bruge til at få adgang til en Oracle-database?

  2. Hvornår anbefales det at bruge MySQL BLOB?

  3. Liste over SQL Server Comparison Operators

  4. Få det sprog, der i øjeblikket bruges i SQL Server