Использование символов в полях перечисления MySQL, это хорошая идея?

#mysql #types #enums

#mysql #типы #перечисления

Вопрос:

Недавно я исследовал производительность MySQL и лучшие практики, и недавно я узнал, что поле ПЕРЕЧИСЛЕНИЯ обладает лучшей производительностью: http://www.mysqlperformanceblog.com/2008/01/24/enum-fields-vs-varchar-vs-int-joined-table-what-is-faster/

Однако мне интересно, стоит ли устанавливать поле ПЕРЕЧИСЛЕНИЯ с символами, поскольку в настоящее время у меня есть поле перечисления с «Положительным», «Отрицательным», «Нейтральным», и я думал о том, чтобы сделать что-то вроде ENUM(‘ ‘,’-‘,’=’) вчтобы абстрагировать данные и сэкономить место в этой таблице. Это поле будет подвергаться объединениям (следовательно, индексу), операторам where, групповым bys и т. Д.

Это хороший подход? Я не хочу позже узнавать, что это был не тот путь.

Ответ №1:

Это даст вам абсолютно нулевую скорость.
Перечисления выполняются быстрее, потому что они хранятся не как текст, а скорее как целые числа.

Внутренне ваше перечисление сохраняется как:

 "Positive"  => 1
"Negative"  => 2
"Neutral"   => 3
  

Перед выполнением запроса MySQL преобразует значения в их целочисленное представление.
Вместо тестирования afield of type string = "Positive"
MySQL подойдет afield of type tinyint = 1

Итог
Вы не сэкономите места вообще.
Вы не получите никакой скорости вообще.

Я бы посоветовал против этого.

Комментарии:

1. Помимо темы пространства / производительности, я лично не слышал ни о каких «зарезервированных словах» MySQL или символах, есть ли ограничение на использование символов в запросах? (кроме тех, которые я использую)

2. @user550178, нет, не совсем, такие символы, как ' и и % и _ требуют специальной обработки, но их легко избежать с помощью

Ответ №2:

Я не понимаю, почему это был бы плохой подход. Вы можете не получить столько, сколько скорость… но символы точно отражают их значение, поэтому я не думаю, что это плохая идея.