Рецепт для массового обновления таблицы MySQL
June 12, 2009 in SQLБывает, что нужно перезаписать большую часть строчек в какой-нибудь большой таблице. В таком случае может быть выгоднее не обновлять строчки, а вставлять в новую таблицу.
#создаем новую таблицу
DROP TABLE IF EXISTS table_new
CREATE TABLE table_new LIKE table
#учитываем старое значение автоинкремента
$a_i = `SELECT auto_increment FROM information_schema.tables WHERE table_name="table"`
ALTER TABLE table_new AUTO_INCREMENT= $a_i
#отключаем индексацию - при обновлении она ни к чему
ALTER TABLE table_new DISABLE KEYS
# Тут производим запись новых данных в таблицу table_new
# Что делать с обновляемыми данными?
# Нужно изначально выгрести из таблицы все данные, которые нужно сохранить,
# в первую очередь - id. А потом подставлять эти данные в новую таблицу.
#копируем в новую таблицу все необновленные строчки
INSERT IGNORE INTO table_new SELECT * FROM table
#включем индексацию
ALTER TABLE table_new ENABLE KEYS
#убираем старую таблицу (или RENAME TABLE table TO table_old)
DROP TABLE IF EXISTS table
#подставляем на ее место новую
RENAME TABLE table_new TO table
Понравился пост? Купи мне кофе