IMO, у вас есть правильные ответы на хранение 2 ^ 32 положительных значений в 4 байта: либо стандартный int
, и вы выполняете математические вычисления, либо binary(4)
, который, в отличие от того, что вы сказали, будет потреблять только 4 байты пространства. (Только varbinary
потребует 2 дополнительных байта памяти). Серия столбцов tinyint
или smallint
была бы неоправданно громоздкой ИМО.
Конечно, существует другое решение для хранения 2 ^ 32 положительных значений, но оно занимает восемь байтов: bigint с проверочным ограничением. Учитывая, насколько дешевы сегодня хранилище и память, IMO, это самое простое и дешевое решение с учетом программных циклов, которые вам придется перепрыгивать с другими решениями, однако, очевидно, у вас есть причина желать сэкономить дополнительные 4 байта в каждой строке. .