Подлый путь:
Не копируйте записи. Это занимает слишком много времени.
Вместо этого просто переименуйте живую таблицу и создайте заново:
RENAME TABLE live_table TO archive_table;
CREATE TABLE live_table (...);
Это должно быть довольно быстро и безболезненно.
РЕДАКТИРОВАТЬ: Метод, который я описал, работает лучше всего, если вы хотите, чтобы архивная таблица за период вращения. Если вы хотите сохранить единую архивную таблицу, возможно, придется усложнить работу. Однако, если вы просто хотите выполнить специальные запросы к историческим данным, вы, вероятно, можете просто использовать UNION.
Если вы хотите сохранить данные за несколько периодов, вы можете выполнить переименование несколько раз, подобно ротации журналов. Затем вы можете определить представление, которое объединяет архивные таблицы в одну большую хонкин 'таблицу.
РЕДАКТИРОВАТЬ 2: Если вы хотите сохранить материал с автоинкрементом, вы можете попробовать:
RENAME TABLE live TO archive1;
CREATE TABLE live (...);
ALTER TABLE LIVE AUTO_INCREMENT = (SELECT MAX(id) FROM archive1);
но, к сожалению, это не сработает. Однако, если вы управляете процессом с помощью PHP, это довольно легко обойти.