Процессор редко является реальным узким местом. Обычно это диск с ограниченным объемом памяти, доступным для пула буферов.
Проблема в том, что ресурсы, необходимые для создания ALTER TABLE
, обычно не являются вашей реальной проблемой ... это факт, что таблица, скорее всего, будет заблокирована во время операции.
В MySQL нет никакого способа для расстановки приоритетов запросов, но если бы они существовали, это, скорее всего, только продлило бы вашу агонию, поскольку блокировка на уровне таблицы продолжалась бы дольше.
Попробуй это:
ALTER TABLE t1
ADD COLUMN c2 BIGINT UNSIGNED NOT NULL AFTER c1,
LOCK=NONE,
ALGORITHM=INPLACE;
Если сервер не позволит вам сделать это - что должно решить вашу проблему - тогда сообщение об ошибке должно объяснить причину.
Если причина связана с внешними ключами, но ваш запрос ALTER
не будет предпринимать никаких действий для нарушения целостности внешнего ключа, вы можете отключить проверки, которые не позволят вам выполнить изменение на месте без блокировок.
SET @@FOREIGN_KEY_CHECKS = 0; -- before ALTER
SET @@FOREIGN_KEY_CHECKS = 1; -- after ALTER
Это не отключает ограничения внешнего ключа для таблицы. Это только освобождает любые запросы, которые вы запускаете от вашего текущего соединения, от необходимости предпринимать шаги, чтобы избежать нарушения целостности отношений. Пока вы ничего не делаете для нарушения целостности отношений, это безопасная стратегия, которую можно использовать, но только тогда, когда она вам нужна.
https://dev.mysql.com/doc/refman/5.7/en/alter-table.html