Стоит ли избегать добавления еще одного поля в большую таблицу MySQL?

StackOverflow https://stackoverflow.com/questions/1031920

Вопрос

У меня есть таблица MySQL-InnoDB с 350 000+ строками, содержащая несколько вещей, таких как id, otherId, shortTitle и так далее. Теперь мне нужно поле Bool / Bit для пары сотен или тысяч этих строк. Должен ли я просто добавить это bool-поле в таблицу или лучше создать новую таблицу, ссылающуюся на идентификаторы старой таблицы - тем самым не рискуя вызвать проблемы с производительностью для всех старых существующих функций, которые обращаются к первой таблице?

(Дополнительная информация: я никогда не использую " SELECT * ... ". Основная таблица часто читает, редко пишет.)

Это было полезно?

Решение

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

Скорее всего, у вас будет одинаковое количество строк на странице, что означает отсутствие снижения производительности вообще.

С другой стороны, использование дополнительного JOIN для доступа к значению строки в другой таблице будет намного медленнее.

Я бы добавил столбец прямо в таблицу.

Другие советы

Что обозначает новый столбец?

С точки зрения моделирования данных, если столбец относится к данным, в зависимости от того, какая обычная форма используется, поместите их вместе с данными; влияние производительности быть проклятым. Если столбец не принадлежит непосредственно таблице, поместите его во вторую таблицу с внешним ключом.

Реально, влияние на производительность добавления нового столбца в таблицу с ~ 350 000 не будет особенно огромным. Вы пытались выполнить инструкцию ALTER TABLE для копии, возможно, на локальной рабочей станции?

Я не знаю, почему люди настаивают на больших таблицах с 350K-строками. В мире мэйнфреймов вот такие большие таблицы конфигурации СУБД: -).

Тем не менее, вы должны разрабатывать свои таблицы в третьей нормальной форме. Если и только если у вас есть проблемы с производительностью, вы должны рассмотреть вопрос о нормализации.

Если у вас есть столбец, который будет применяться только к определенным строкам, он (вероятно) не будет 3NF, чтобы поместить его в ту же таблицу. У вас должна быть отдельная таблица с внешним ключом в вашей «первичной» таблице.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top