Существует ли преимущество производительности при использовании перечисления в ситуациях, когда для поля имеется всего 5-10 различных возможных значений? если не в чем преимущество?
Преимущества MySQL Enum?
Ответ 1
Существует огромное ограничение производительности при использовании ENUM
для таких операций, как:
-
Запросить список допустимых значений в
ENUM
, например, для заполнения раскрывающегося меню. Вы должны запросить тип данных изINFORMATION_SCHEMA
и проанализировать список из возвращаемого BLOB-поля. -
Измените набор допустимых значений. Для этого требуется оператор
ALTER TABLE
, который блокирует таблицу и может выполнять реструктуризацию.
Я не поклонник MySQL ENUM
. Я предпочитаю использовать таблицы поиска. См. Также мой ответ на "Как обрабатывать перечисления без полей перечисления в базе данных?"
Ответ 2
ENUM представлены внутренне 1 или 2 байта в зависимости от количества значений. Если строки, которые вы храните, больше 2 байтов и редко меняются, то ENUM - это путь. Сравнение будет быстрее с перечислением, и они занимают меньше места на диске, что, в свою очередь, может привести к более быстрому времени поиска.
Недостатком является то, что перечисления менее гибкие, когда дело доходит до добавления/удаления значений.
Ответ 3
В этой статье http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/ Фернандо смотрит на характеристики типа Enum для запросов.
Результат состоит в том, что при использовании ENUM может показаться немного менее элегантным с точки зрения дизайна (если иногда меняется значение ENUM), коэффициент усиления производительности очевиден для больших наборов данных. Подробности см. В его статье. Вы согласны?
Ответ 4
Нет, см. сравнение здесь
Преимущество лежит в читаемости кода.