Есть только одна вещь, которую вам не хватает. Особенно, если вы используете InnoDB, что вы хотите, чтобы явно добавить ORDER BY пункта в вашем ЗЕЬЕСТЕ, чтобы убедиться, что вы вставка строк в первичном ключе (кластерный индекс) порядок:
INSERT INTO product_backup SELECT * FROM product ORDER BY product_id
Рассмотрите возможность удаления вторичных индексов на резервную таблицу, если они не нужны. Это также сэкономит некоторую нагрузку на сервере.
Наконец, если вы используете InnoDB, уменьшить количество блокировок строк, которые необходимы и просто явно заблокировать обе таблицы:
LOCK TABLES product_backup WRITE;
LOCK TABLES product_id READ;
INSERT INTO product_backup SELECT * FROM product ORDER BY product_id;
UNLOCK TABLES;
Блокирующий материал, вероятно, не будет иметь огромное значение, так как блокировки строк очень быстро (хотя и не так быстро, как блокировки стола), но так как вы спросили.
Я думает, что это лучший способ. Таким образом, вы также сохраняете индексы. –
Speedwise это примерно так же хорошо, как и получается. Конечно, вы можете отложить создание индекса в таблице резервного копирования до тех пор, пока все данные не будут скопированы, что значительно увеличит скорость ввода. – fvu
Это интересно, спасибо. Я был любопытен вокруг копирования данных и задавался вопросом, было ли это утечкой в базе данных («SELECT *» отбросил меня, или это займет много времени для обработки из-за способа построения запроса). Если это приемлемый способ копирования данных, то это прекрасно. – crmpicco