Тайминг таблицы Mysql Alter в зависимости от наличия внешних ключей

У нас есть ситуация, когда у нас есть таблица A и B, где A имеет несколько тысяч строк (примерно 50 тысяч), а B - несколько миллионов строк (примерно 5M). В таблице B есть столбец, указывающий на первичный ключ таблицы A. Нам нужно добавить столбец в таблицу A, и мы обеспокоены тем, что во время выполнения оператора alter он, возможно, будет иметь блокировку чтения для таблицы B.

Мой первый вопрос: правда ли, что таблица B будет заблокирована при изменении таблицы A? И если да, то было бы лучше сначала перенести внешний ключ из B в A, затем запустить операторы alter и затем воссоздать внешний ключ.

Мы используем MySQL 5.5, InnoDB и отдельные файлы для каждой таблицы.


person Ajay    schedule 01.04.2013    source источник
comment
Лично я бы рекомендовал удалить ограничение внешнего ключа, когда размер таблицы большой. Это замедлит процесс. А во-вторых, при изменении таблицы внутри создается копия таблицы, и в случае успеха старая таблица заменяется новой. Так что блокировка чтения имеет для меня смысл.   -  person georgecj11    schedule 11.04.2013


Ответы (1)


Вы пробовали это?

set foreign_key_checks = 0;
ALTER TABLE ...;
set foreign_key_checks = 1;

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

person Slowcoder    schedule 12.04.2013