On Tue, May 28, 2013 at 10:15 AM, Wang, Gao <[email protected]> wrote:
> Dear all,
>
> I use sqlite to store, query and perform simple math operations on large
> datasets of small integers -- all values I have in the dataset are -1, 0, 1
> and 2. These integers are stored as INTEGER (4 byte). I desperately need a
> way to reduce the size of my database because I have dozens of databases
> like this with size ~100G which takes too much of my storage. I'd like some
> other integer type for {-1,0,1,2} such as "SMALLINT" (
> http://www.sqlite.org/datatype3.html). I understand sqlite data types are
> dynamic and it does not make a difference to create a field of type
> SMALLINT. I wonder if there are something I can do to fulfill my need.
> Anyway to hack into the sqlite.c codes?
>
>
SQLite does not allocate 4 bytes to every integer. It uses a variable
number of bytes (between 1 and 9) depending on the magnitude of the
integer. See http://www.sqlite.org/fileformat2.html#record_format for
additional information. Values of 0 and 1 take 1 bytes. Values of -1 and
2 take two bytes.
See also the sqlite3_analyzer.exe utility. Running sqlite3_analyzer.exe on
one of your database files might give you a better idea of where space is
being used.
--
D. Richard Hipp
[email protected]
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users