MySQL: выполнение обновлений для большой таблицы с индексами
Вечер,
У меня есть большая, но простая таблица с почти 30 миллионами строк. Таблица имеет индекс для большинства столбцов. Потребовалось много времени, чтобы выполнить какие-либо обновления, и мне было интересно, будет ли хорошей идеей удалить индексы и перестроить их, как только я закончу вносить изменения в таблицу?
Причина, по которой я спрашиваю, заключается в том, что я прочитал здесь несколько постов, где люди не смогли пересоздать индекс для большой таблицы. Однако я не понимаю, почему это так, поскольку я могу импортировать эту таблицу из текстового файла объемом 2,2 ГБ за 20 минут.
Стол состоит из нескольких маленьких карманов и варчаров.
Запросы на обновление, которые я запускал, были такими:
UPDATE census SET rCo = 11470 WHERE rCo = 'Zet';
Они не были слишком медленными, но в настоящее время я меняю одно из полей с varchar(4) на varchar(8), и это занимает очень много времени.
Я запустил запрос на обновление из командной строки (Linux).
1 ответ
Я думаю, что вы должны сохранить индекс, так как вы используете его в предложении where.
С другой стороны, я уверен, что вам лучше создать совершенно новый стол:
CREATE TABLE census_2 (...)
SELECT ..., IF(rCo = 'Zet', 11470, rCo) FROM census
а затем отбросьте старый, + воссоздайте индексы на новом ПОСЛЕ.