Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL kopiert effizient alle Datensätze von einer Tabelle in eine andere

Es gibt nur eine Sache, die Sie vermissen. Insbesondere wenn Sie InnoDB verwenden, möchten Sie explizit eine ORDER BY-Klausel in Ihre SELECT-Anweisung einfügen, um sicherzustellen, dass Sie Zeilen in der Reihenfolge des Primärschlüssels (clustered index) einfügen:

INSERT INTO product_backup SELECT * FROM product ORDER BY product_id

Erwägen Sie, sekundäre Indizes aus der Sicherungstabelle zu entfernen, wenn sie nicht benötigt werden. Dadurch wird auch etwas Last auf dem Server eingespart.

Wenn Sie schließlich InnoDB verwenden, reduzieren Sie die Anzahl der erforderlichen Zeilensperren und sperren Sie einfach explizit beide Tabellen:

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

Das Sperren wird wahrscheinlich keinen großen Unterschied machen, da das Sperren von Zeilen sehr schnell ist (wenn auch nicht so schnell wie das Sperren von Tabellen), aber da Sie gefragt haben.