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

а затем отбросьте старый, + воссоздайте индексы на новом ПОСЛЕ.

Другие вопросы по тегам