Есть ли основания беспокоиться о порядке столбцов в таблице? - PullRequest
77 голосов
/ 21 мая 2009

Я знаю, что вы можете ИЗМЕНИТЬ порядок столбцов в MySQL с помощью FIRST и AFTER, но зачем вам это беспокоить? Поскольку в хороших запросах при вставке данных явно указываются имена столбцов, есть ли какая-то причина заботиться о том, в каком порядке находятся ваши столбцы в таблице?

Ответы [ 13 ]

0 голосов
/ 22 мая 2009

Как уже отмечалось, существует множество потенциальных проблем с производительностью. Однажды я работал над базой данных, где размещение очень больших столбцов в конце улучшало производительность, если вы не ссылались на эти столбцы в своем запросе. Очевидно, что если запись охватывает несколько блоков диска, ядро ​​базы данных может прекратить чтение блоков, как только получит все необходимые столбцы.

Конечно, любое влияние на производительность сильно зависит не только от производителя, которого вы используете, но также и от версии. Несколько месяцев назад я заметил, что наши Postgres не могут использовать индекс для сравнения «как». То есть, если вы написали «somecolumn типа« M% »», он не был достаточно умен, чтобы перейти к M и выйти, когда он нашел первый N. Я планировал изменить несколько запросов, чтобы использовать «между». Затем мы получили новую версию Postgres, и она с умом справилась. Рад, что никогда не удосужился изменить запросы. Очевидно, что здесь это не имеет прямого отношения, но я хочу сказать, что все, что вы делаете из соображений эффективности, может быть устаревшим со следующей версией.

Порядок столбцов почти всегда очень важен для меня, потому что я обычно пишу общий код, который читает схему базы данных для создания экранов. Например, мои экраны «редактировать запись» почти всегда создаются путем чтения схемы, чтобы получить список полей, а затем отображения их по порядку. Если бы я изменил порядок столбцов, моя программа все равно работала бы, но отображение могло бы быть странным для пользователя. Например, вы ожидаете увидеть имя / адрес / город / штат / почтовый индекс, а не город / адрес / почтовый индекс / имя / штат. Конечно, я мог бы поместить порядок отображения столбцов в код, контрольный файл или что-то еще, но затем каждый раз, когда мы добавляли или удаляли столбец, мы должны были помнить, чтобы обновлять контрольный файл. Мне нравится говорить вещи один раз. Кроме того, когда экран редактирования построен исключительно из схемы, добавление новой таблицы может означать написание нулевых строк кода для создания экрана редактирования для него, что очень круто. (Ну, ладно, на практике обычно мне нужно добавить запись в меню для вызова универсальной программы редактирования, и я, как правило, отказался от универсального «выберите запись для обновления», потому что существует слишком много исключений, чтобы сделать его практичным .)

0 голосов
/ 21 мая 2009

В общем, что происходит в SQL Server при изменении порядка столбцов через Management Studio, это то, что он создает временную таблицу с новой структурой, перемещает данные в эту структуру из старой таблицы, удаляет старую таблицу и переименовывает новую один. Как вы можете себе представить, это очень плохой выбор для производительности, если у вас большой стол. Я не знаю, делает ли My SQL то же самое, но это одна из причин, почему многие из нас избегают переупорядочения столбцов. Поскольку select * никогда не должен использоваться в производственной системе, добавление столбцов в конце не является проблемой для хорошо спроектированной системы. Порядок столбцов в таблице в общем случае не должен быть перепутан.

0 голосов
/ 21 мая 2009

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

...