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