Лучшая практика с mysql innodb для переименования огромной таблицы, когда таблица с таким именем уже существует

Я использую Mysql 5.5.. + INNODB и сервер Windows.

Случай (сделайте это проще, чем реальный случай):

У меня есть 2 таблицы 1 ГБ с именем new_car и car таблица 1 ГБ.

Я заменяю таблицу car таблицей new_car каждые 10 часов, а не вручную (автоматически по коду) - важно делать это быстро (реальные данные веб-сайта).

Я читал (скажем, проблема в innodb): http://www.mysqlperformanceblog.com/2011/02/03/performance-problem-with-innodb-and-drop-table/

решение1:

DROP TABLE car;
RENAME TABLE new_car TO car;

Решение 2 (сделать сброс в конце - возможно, он не блокирует доступ к таблице, который происходит во время сброса):

RENAME TABLE car TO temp_car;
RENAME TABLE new_car TO car;
DROP TABLE temp_car;

Решение 3 (усеките быстрое удаление таблицы и создайте пустую таблицу, а затем, возможно, отмените действие после этого должно быть очень быстро):

TRUNCATE TABLE car;
DROP TABLE car;
RENAME TABLE new_car TO car; 

Решение4:

RENAME TABLE car TO temp_car;
RENAME TABLE new_car TO car;
TRUNCATE TABLE temp_car;
DROP TABLE temp_car;

Какое решение является лучшим и почему, или, пожалуйста, напишите другое лучшее решение?

Спасибо


person Ben    schedule 12.10.2012    source источник
comment
Настройте среду разработки и тестирования и протестируйте ее.   -  person MatBailie    schedule 12.10.2012
comment
По этой ссылке мы можем изменить имя таблицы кажется. Сделайте резервную копию, прежде чем что-либо делать.   -  person gks    schedule 12.10.2012
comment
Я прочитал ссылку выше, прежде чем задать вопрос, спасибо   -  person Ben    schedule 12.10.2012
comment
Решение 2 выглядит хорошо. Действуй. Еще лучше оставить temp_car на время на случай, если вам понадобится вернуться.   -  person Ben    schedule 12.10.2012
comment
Бен, а как насчет решения 4? (процесс выполняется автоматически с помощью кода каждые 10 часов, а не вручную)   -  person Ben    schedule 12.10.2012


Ответы (3)


Я не понимаю, почему вы DROP таблицы. Вам всегда нужны эти 2 таблицы, и вы бы (я полагаю, заполняли таблицу New_Car...

RENAME TABLE car TO temp_car;
RENAME TABLE new_car TO car;
TRUNCATE TABLE temp_car;
RENAME TABLE temp_car TO new_car;
person Louis Ricci    schedule 12.10.2012

Как описано в документации RENAME TABLE:

RENAME TABLE переименовывает одну или несколько таблиц. Операции переименования выполняются слева направо.

Вместо того, чтобы запускать несколько запросов на переименование, вы можете выполнить несколько переименований таблиц в одном запросе, например:

RENAME TABLE car TO temp_car, new_car TO car
DROP TABLE temp_car

Однако имейте в виду, что такое переименование таблицы может вызвать проблемы с блокировкой/задержкой в ​​течение нескольких секунд. Это зависит от вашего приложения, если это приемлемо.

person Shubham Chaudhary    schedule 03.10.2019

Используйте замену в Это занимает около 5 минут или используйте Загрузить файл для его заполнения.

person killerklown    schedule 10.01.2014