Если вы добавляете столбцы без их заполнения, это происходит довольно быстро, так как это просто изменение метаданных. Добавление индекса требует чтения таблицы (или, возможно, другого индекса), так что это может занять очень много времени и оказать гораздо большее влияние, чем простое изменение метаданных при записи подробностей нового индекса.
Если новые столбцы будут заполняться как часть ALTER TABLE, это другой вопрос.
- База данных может подвергаться незапланированному отключению в ходе добавления этих данных в каждую строку данных таблицы
- В памяти сервера может не хватить места для записи каждой строки, измененной в этой таблице
- Следовательно, эти изменения строк могут быть записаны в файлы данных перед фиксацией и поэтому записаны как грязные блоки
- При следующем чтении этих блоков после успешного завершения таблицы ALTER будет выполнена отложенная очистка блока (т. Е. Запомнится тот факт, что изменение было зафиксировано)
Если сначала добавить столбцы (с данными), то индекс создания (вероятно) прочитает таблицу и выполнит добавленную работу по очистке отложенного блока.
Если сначала создать индекс, а затем добавить столбцы, создание индекса может быть быстрее, но отложенная очистка блока не произойдет, и эта служебная работа будет подхвачена приложением позже (возможно, select * from T where C = whatever
)