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