Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL copia in modo efficiente tutti i record da una tabella all'altra

C'è solo una cosa che ti manca. In particolare, se stai utilizzando InnoDB, vuoi aggiungere esplicitamente una clausola ORDER BY nella tua istruzione SELECT per assicurarti di inserire le righe nell'ordine della chiave primaria (indice cluster):

INSERT INTO product_backup SELECT * FROM product ORDER BY product_id

Prendi in considerazione la rimozione degli indici secondari sulla tabella di backup se non sono necessari. Ciò consentirà anche di risparmiare un po' di carico sul server.

Infine, se stai utilizzando InnoDB, riduci il numero di blocchi di riga richiesti e blocca in modo esplicito entrambe le tabelle:

LOCK TABLES product_backup WRITE;
LOCK TABLES product READ;
INSERT INTO product_backup SELECT * FROM product ORDER BY product_id;
UNLOCK TABLES;

Le cose di blocco probabilmente non faranno una grande differenza, poiché il blocco delle righe è molto veloce (anche se non veloce come i blocchi delle tabelle), ma poiché hai chiesto.