Производительность MySQL ALTER TABLE ADD COLUMN ПОСЛЕ КОЛОННЫ - на большой таблице
Я хочу использовать следующую команду для добавления столбца в существующую таблицу:
ALTER TABLE foo ADD COLUMN bar AFTER COLUMN old_column;
Может ли эта опция занимать значительно больше той же команды без опции AFTER COLUMN, как показано ниже?
ALTER TABLE foo ADD COLUMN bar;
Будет ли первая команда использовать большее количество табличного пространства tmp во время выполнения для выполнения действия?
Контекст: у меня очень большая таблица (подумайте над миллиардом строк), и я хочу добавить дополнительный столбец, используя опцию AFTER COLUMN, но я не хочу, чтобы меня слишком наказывали.
Ответы
Ответ 1
В то время как другие ответы полезны в качестве примеров синтаксиса, необходимого для добавления столбцов в таблицу, ответ на реальный вопрос был предоставлен NB:
Ответ 2
Вот что я буду делать:
CREATE TABLE newtable LIKE oldtable;
ALTER TABLE newtable ADD COLUMN columnname INT(10) UNSIGNED NOT NULL DEFAULT 0;
Я не знаю тип столбца. Я приведу пример с INT. Теперь вы можете указать WHERE, который вы хотите добавить в этот новый столбец. По умолчанию он добавит его в конец, если вы не укажете ключевое слово AFTER, если вы его предоставите, вам нужно будет указать в том порядке, который вы вставляете, иначе вам нужно положить его в конец.
INSERT INTO newtable SELECT field1, field2, field3 /*etc...*/, newcolumn = 0 FROM oldtable;
ИЛИ, если вы добавили его между столбцами:
# eg: ALTER TABLE newtable ADD COLUMN columnname INT(10) UNSIGNED NULL AFTER field2;
INSERT INTO newtable SELECT field1, field2, newcolumn = 0, field3 /*etc...*/ FROM oldtable;
Вы можете добавить предложение where, если вы хотите сделать это в пакетном режиме.
Как только все записи есть
DROP TABLE oldtable;
RENAME TABLE newtable to oldtable;
Ответ 3
Создайте другую таблицу и измените новую таблицу. (например, Книга Зевса)
И используя ALTER TABLE newtable DISABLE KEYS
и ALTER TABLE newtable ENABLE KEYS
до и после запроса на вставку, можно сделать это быстрее. (например, ниже)
CREATE TABLE newtable ....;
ALTER TABLE newtable ....;
ALTER TABLE newtable DISABLE KEYS;
INSERT INTO newtable ....;
ALTER TABLE newtable ENABLE KEYS;
DROP TABLE oldtable;