Имеет ли значение порядок столбцов в ваших таблицах MySQL? - PullRequest
26 голосов
/ 21 января 2010

Во время изучения mysql я прочитал, что при добавлении столбца в таблицу mysql можно выполнить следующее утверждение:

ALTER TABLE contacts ADD email VARCHAR(60) AFTER name;

или

ALTER TABLE contacts ADD email VARCHAR(60) FIRST;

Когда бы вы хотели это сделать? Можно ли использовать порядок столбцов для оптимизации запросов? Должны ли longblobs быть последним столбцом для оптимизации потребления пространства? Или эти команды существуют по какой-то другой причине?

Ответы [ 7 ]

7 голосов
/ 20 мая 2012

Вопрос не имеет ничего общего с реляционной моделью или SQL. Это вопрос производительности.

В некоторых базах данных более эффективно упорядочивать столбцы определенным образом из-за способа доступа к диску. Существенное преимущество также зависит от платформы. Это проблема ввода-вывода низкого уровня, связанная с тем, как спроектировано основное хранилище и как к нему обращается механизм. Поставщики патентованных движков обычно предоставляют эту информацию через свои учебные и учебные отделы.

Я думаю, что вам нужно поговорить с кем-то, кто знает мельчайшие детали модели хранилища и методов ввода / вывода для MySQL на вашей конкретной платформе, или с тем, кто тестировал это на вашей платформе, чтобы получить ответ ,

Вполне возможно, что они положили его на диск оптимизированным способом и скрыли порядок столбцов от вас.

7 голосов
/ 21 января 2010

Однако это повлияет на порядок результата в select * from mytable.

Вот почему вы всегда должны называть столбец в операторе выбора, например, select col1, col2 from mytable. Но если вы знаете, что приложение использует *, вы должны позаботиться о добавлении столбца.

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

1 голос
/ 16 сентября 2015

A «Когда вы захотите использовать это», а не из-за проблем с производительностью.

Репликация на основе строк прервется, если порядок столбцов будет различаться между главным и подчиненным, а типы столбцов несовместимы (ошибка 1677).

ALTER TABLE contacts MODIFY email VARCHAR(60) AFTER name;

будет одним из способов исправить эту проблему.

1 голос
/ 12 сентября 2012

Я думал, что это не имеет значения для производительности, но в некоторых случаях - когда вы используете индексы.

Пример.

Я использовал таблицу соединений:

| category_id | user_id |

Обе колонки были unsigned int (10), а primary key ( category_id, user_id ) Обратите внимание на порядок столбцов. Когда я начал выбирать из этой таблицы с where user_id = ? - производительность была низкой.

После того, как я изменил порядок столбцов (сначала сделал user_id), он начал выбирать время быстрее.

0 голосов
/ 22 января 2010

В реляционной модели отсутствует концепция упорядочения столбцов в строках и отсутствует порядок упорядочения строк в таблицах.

0 голосов
/ 21 января 2010

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

0 голосов
/ 21 января 2010

Нет, это не должно иметь значения. Нормализованная база данных также не должна иметь ограничений на порядок столбцов.

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