2014-11-05 2 views
0

В данной таблице у меня есть несколько столбцов с «да»/«нет» значения ....Объединение нескольких столбцов в один, используя битовые значения

Table someTable 

is_shipped (ENUM) 'n','y' DEFAULT n 
is_paid_for (ENUM) 'n','y' DEFAULT n 

Будет ли это быть лучшей идеей иметь выше поля как BIT (2) coloumn, которые эффективно объединили бы два поля в одно поле?

Table someTable 
is_shipped_paid BIT(2) 

Где каждое значение бита будет определять значение двоичного флага?

'0' = Not Shipped 
'1' = Shipped 

Следовательно, значение «01» для указанного выше столбца будет указывать, что элемент не поставляется и оплачивается ... и т.д. ...

Любые мысли/комментарии/критику?

ответ

1

Итак, вы сохраняете две или три байта строки, считайте, что для каждой строки требуется как минимум 26 байт памяти, а для таблицы, которую можно использовать, вам нужно как минимум 10% свободного места, плюс еще 20% для несколько индексов, чтобы сделать ряды доступными, тогда сохранение не имеет значения.

Особенно, если учесть дополнительное усложнение запросов и обновления этих полей через стандартный SQL.

Также считайте, что в эти дни вы покупаете диск в единицах терабайт за 150 долларов США за и несколько байтов, сохраненных здесь, и там просто не стоит беспокоиться.

В 1980-х годах, когда вы купили диск K за большие деньги, такая оптимизация была распространена: большинство крупных центров обработки данных затем проводили следующие 30 лет, пытаясь исправить возникшие проблемы.

Если вам действительно нужно сэкономить дисковое пространство, которое плохо учитывает возможность сжатия INNO DB и позволяет базе данных выполнять эту работу.

Смежные вопросы