Я с Рэнди. Мы были в похожей ситуации, и в MySQL есть два способа сделать что-то вроде этого:
Завершите работу сервера. Это то, что вы, вероятно, будете делать. Это просто, это легко, это работает. Время делать? Может быть, полчаса / 45 минут, в зависимости от пропускной способности диска. См. Ниже.
Создайте новую таблицу с новым индексом, скопируйте все данные, приостановите сервер, удалите первую таблицу, измените новую на старое имя, запустите сервер. Простои? 10 минут, может быть, но очень сложно.
Второй вариант работает и экономит время простоя при создании индекса (если это занимает много времени). Но это занимает больше места, это более сложно (так как вам приходится иметь дело с новыми записями, вставленными из основной таблицы, и это, вероятно, заблокирует MyISAM при копировании данных. Удаление таблицы займет некоторое время, изменив таблицу на новое имя займет некоторое время. Это действительно очень сложно. Если у вас есть таблица объемом 2 ТБ, это может быть полезно, но для 27G это, вероятно, излишне.
У вас есть второй сервер, который по своим характеристикам близок к вашему производственному серверу? Загрузите свою последнюю резервную копию и сделайте индекс там, чтобы вы знали, сколько времени займет добавление. Тогда планируйте время простоя.
InnoDB лучше во многих вещах, но новые индексы все еще блокируют таблицу. Те возможности, которые MSSQL (и я думаю, PostgreSQL) должны делать подобные вещи без блокировки, были бы великолепны.