Mysql
 sql >> Base de données >  >> RDS >> Mysql

MySQL copie efficacement tous les enregistrements d'une table à une autre

Il te manque juste une chose. En particulier, si vous utilisez InnoDB, vous souhaitez ajouter explicitement une clause ORDER BY dans votre instruction SELECT pour vous assurer que vous insérez des lignes dans l'ordre de la clé primaire (index clusterisé) :

INSERT INTO product_backup SELECT * FROM product ORDER BY product_id

Envisagez de supprimer les index secondaires sur la table de sauvegarde s'ils ne sont pas nécessaires. Cela permettra également d'économiser de la charge sur le serveur.

Enfin, si vous utilisez InnoDB, réduisez le nombre de verrous de ligne requis et verrouillez simplement explicitement les deux tables :

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

Les éléments de verrouillage ne feront probablement pas une grande différence, car le verrouillage de ligne est très rapide (mais pas aussi rapide que les verrous de table), mais puisque vous avez demandé.