Есть два способа сохранить типы перечислений в базе данных: в виде строки или в виде целого числа.
Сохранение перечисления ( sex = {мужской, женский}
, account_type = {regular, pro, admin}
и т. д.) в виде строк делает вещи лучше читается, но требует больше места, чем целые числа.
С другой стороны, целые числа требуют отображения перечислений в базе данных и из нее. В качестве преимущества чувствительность к регистру обрабатывается за пределами базы данных с помощью целых чисел.
Предполагая, что оба индексированы, стоит ли вообще выполнять целочисленное преобразование? Насколько быстрее выполняется поиск с помощью целых чисел?
Пример
Возможно, конкретный пример может помочь визуализировать вещи. Давайте возьмем указанный выше account_type с базой данных из 100 000 пользователей.
String enum
Предполагая, что 8-бит фиксированной длины Тип CHAR
7*100000*8/8 = 700000 bytes
Целочисленное перечисление
Принятие 8-битных целых чисел TINYINT
100000*8/8 = 400000 bytes
Похоже, что размер почти вдвое с целочисленными перечислениями. Также необходимо рассмотреть индексы.