MySQL Enum преимущество в производительности? - PullRequest
49 голосов
/ 20 апреля 2009

Есть ли преимущество в производительности при использовании enum в ситуациях, когда для поля доступно только 5-10 различных значений? если нет, то в чем преимущество?

Ответы [ 4 ]

44 голосов
/ 20 апреля 2009

Существует огромная производительность штраф за использование ENUM для таких операций, как:

  • Запрос списка разрешенных значений в ENUM, например, для заполнения раскрывающегося меню. Вы должны запросить тип данных из INFORMATION_SCHEMA и проанализировать список из возвращенного BLOB-поля.

  • Измените набор допустимых значений. Требуется оператор ALTER TABLE, который блокирует таблицу и может выполнить реструктуризацию.

Я не фанат MySQL ENUM. Я предпочитаю использовать справочные таблицы. См. Также мой ответ на вопрос " Как обрабатывать перечисления без полей перечисления в базе данных? "

24 голосов
/ 20 апреля 2009

ENUM внутренне представлены 1 или 2 байтами, в зависимости от количества значений. Если строки, которые вы храните, имеют длину более 2 байтов и редко меняются, тогда ENUM - это то, что вам нужно. Сравнение будет быстрее при использовании enum, и они будут занимать меньше места на диске, что, в свою очередь, может привести к ускорению поиска.

Недостатком является то, что перечисления менее гибки, когда дело доходит до добавления / удаления значений.

10 голосов
/ 25 октября 2012

В этой статье http://fernandoipar.com/2009/03/09/using-the-enum-data-type-to-increase-performance/ Фернандо рассматривает характеристики типа Enum для запросов.

В результате, хотя использование ENUM может показаться немного менее элегантным с точки зрения дизайна (если ваше значение ENUM иногда меняется), прирост производительности очевиден для больших наборов данных. Смотрите его статью для деталей. Вы согласны?

1 голос
/ 20 апреля 2009

Нет, см. Сравнение здесь

Преимущество заключается в удобочитаемости кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...