Имеет ли значение порядок столбцов в ваших таблицах MySQL?
Во время обучения mysql я читал, что вы можете выполнить следующий оператор при добавлении столбца в таблицу mysql:
ALTER TABLE contacts ADD email VARCHAR(60) AFTER name;
или
ALTER TABLE contacts ADD email VARCHAR(60) FIRST;
Когда вы захотите это сделать? Может ли порядок столбцов использоваться для оптимизации запросов? Должны ли длинные блоки быть последним столбцом для оптимизации потребления пространства? Или эти команды существуют по какой-то другой причине?
Ответы
Ответ 1
Это, однако, повлияет на порядок результата в select * from mytable
.
Вот почему вы всегда должны указывать столбец в инструкции select, например. select col1, col2 from mytable
. Но если вы знаете, что приложение использует *
, тогда вы должны позаботиться о том, чтобы добавить столбец.
В противном случае упорядочьте столбец так, чтобы он был наиболее логичным для понимания. Если это влияет на перфоманс, значит, вы уже находитесь на темной стороне настройки производительности базы данных, и у вас, вероятно, проблема где-то еще.
Ответ 2
Вопрос не имеет ничего общего с реляционной моделью или SQL. Это вопрос производительности.
В некоторых базах данных более эффективно упорядочивать столбцы определенным образом из-за способа доступа к диску. Есть ли существенное преимущество и для платформы. Это проблема ввода-вывода на низком уровне, связанная с тем, как разрабатывается базовое хранилище и каким способом он доступен при работе с двигателем. Поставщики проприетарных двигателей обычно предоставляют эту информацию через свои отделы образования и обучения.
Я думаю, вам придется поговорить с тем, кто знает подробные подробные сведения о модели хранилища и методах ввода-вывода для MySQL на вашей конкретной платформе или кто-то, кто имеет это на вашей платформе, чтобы получить ответ,
Это вполне возможно, что они будут размещены на диске оптимизированным образом и скрыть этот порядок столбцов от вас.
Ответ 3
Я думал, что он не имеет значения производительности, но в некоторых случаях - при использовании индексов.
Пример.
Я использовал таблицу соединений:
| category_id | user_id |
Оба столбца были unsigned int (10)
, а primary key ( category_id, user_id )
Обратите внимание на порядок столбцов. Когда я начал выбирать из этой таблицы с where user_id = ?
- производительность была низкой.
После того, как я изменил порядок столбцов (сначала сделал user_id), он начал выбирать время быстрее.
Ответ 4
A "Когда вы хотите использовать это", а не проблему с производительностью.
Репликация на основе строк будет разрываться, если порядок столбцов отличается между основным и подчиненным, а типы столбцов несовместимы (ошибка 1677).
ALTER TABLE контакты ИЗМЕНИТЬ email VARCHAR (60) ПОСЛЕ имени;
будет одним из способов исправить эту проблему.
Ответ 5
Нет, это не имеет значения. Нормализованная база данных также не должна иметь ограничений на порядок столбцов.
Ответ 6
порядок столбцов не имеет значения. Это чисто удобная функция. просто чтобы позволить вам реструктурировать таблицу базы данных так, как вам нравится после ее создания.
Ответ 7
Реляционная модель не имеет понятия упорядочения столбцов внутри строк и понятия упорядочения строк в таблицах.