#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:
Я не понимаю, почему это был бы плохой подход. Вы можете не получить столько, сколько скорость… но символы точно отражают их значение, поэтому я не думаю, что это плохая идея.