Я начал работать над проектом, где есть довольно большая таблица (около 82 000 000 строк), которая, как мне кажется, очень раздута. Одно из полей определяется как:
consistency character varying NOT NULL DEFAULT 'Y'::character varying
Он используется как логическое значение, значения всегда должны быть ('Y' | 'N').
Примечание: нет проверочного ограничения и т.д.
Я пытаюсь найти причины для оправдания изменения этого поля. Вот что я имею:
- Это используется как логическое, поэтому сделайте это. Явный лучше, чем неявный.
- Он будет защищать от ошибок кодирования, потому что прямо сейчас там что-то, что можно преобразовать в текст, будет слепо.
Вот мои вопросы.
- Как насчет размера/хранения? Db - UTF-8. Итак, я думаю, что в этом плане не так много экономии. Он должен быть 1 байт для
boolean
, но также 1 байт для'Y'
в UTF-8 (по крайней мере, то, что я получаю, когда проверяю длину в Python). Есть ли какие-либо другие накладные расходы на хранение, которые будут сохранены? - Производительность запроса? Будет ли Postgres получать прирост производительности для причины "
=TRUE
" и "='Y'
"?