Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

MySQL copia eficientemente todos os registros de uma tabela para outra


Só está faltando uma coisa. Especialmente, se você estiver usando o InnoDB, você deseja adicionar explicitamente uma cláusula ORDER BY em sua instrução SELECT para garantir que você esteja inserindo linhas na ordem de chave primária (índice clusterizado):
INSERT INTO product_backup SELECT * FROM product ORDER BY product_id

Considere remover índices secundários na tabela de backup se eles não forem necessários. Isso também economizará alguma carga no servidor.

Finalmente, se você estiver usando o InnoDB, reduza o número de bloqueios de linha necessários e apenas bloqueie explicitamente ambas as tabelas:
LOCK TABLES product_backup WRITE;
LOCK TABLES product READ;
INSERT INTO product_backup SELECT * FROM product ORDER BY product_id;
UNLOCK TABLES;

O material de bloqueio provavelmente não fará uma grande diferença, pois o bloqueio de linha é muito rápido (embora não tão rápido quanto os bloqueios de tabela), mas já que você perguntou.