Если у вас есть только несколько переменных , я бы посоветовал хранить отдельные boolean
столбцы.
- Индексирование легко,В частности, также индексы для выражений и частичные индексы .
- Условия для запросов легко писать, читать и иметь смысл.
- Логический столбец занимает 1 байт (без выравнивания выравнивания).Только для нескольких переменных это занимает наименьшее пространство.
- В отличие от других опций * столбцы 1021 * допускают значения
NULL
для отдельных битов, если вам это нужно.Вы всегда можете определить столбцы NOT NULL
, если вы этого не сделаете.
Если у вас больше переменных, заполненных рукой, но не более 32 , integer
столбец может служить лучше всего.(Или bigint
для до 64 переменных.)
- Занимает 4 байта на диске (может потребоваться выравнивание выравнивания, в зависимости от предыдущих столбцов).
- Очень быстрая индексация для точных совпадений (оператор
=
). - Обработка отдельных значений может быть медленнее / менее удобной, чем с
varbit
или boolean
.
С четнымбольше переменных, или если вы хотите много манипулировать значениями, или если у вас нет огромных таблиц или дискового пространства / ОЗУ не проблема, или если вы не уверены, что выбрать, я бы рассмотрел bit(n)
или bit varying(n)
(короткий: varbit(n)
.
Всего за 3 бита информации отдельные столбцы boolean
имеют 3 байта, для integer
требуется 4 b.ytes (возможно, дополнительное выравнивание выравнивания) и bit string
6 байтов (5 + 1).
Для 32 бит информации, integer
все еще требуется 4 байта (+ заполнение), bit string
занимает 9 байтов для тех же (5 + 4), а boolean
столбцы занимают 32 байта.
Для оптимизации дискового пространства далее вам необходимо понять механизмы хранения:PostgreSQL, особенно выравнивание данных. Подробнее в этом связанном ответе .
Этот ответ о том, как преобразовать типы логический , бит(n) и integer также могут помочь.