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

Comment mysql peut-il insérer des millions d'enregistrements plus rapidement ?

C'est probablement parce que vous insérez des enregistrements comme celui-ci :

INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2");
INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2");
INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2");
INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2");
INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2");

Envoi d'une nouvelle requête à chaque fois que vous avez besoin de INSERT quelque chose est mauvais pour les performances. Au lieu de cela, combinez ces requêtes en une seule requête, comme celle-ci.

INSERT INTO `table1` (`field1`, `field2`) VALUES ("data1", "data2"),
                                                 ("data1", "data2"),
                                                 ("data1", "data2"),
                                                 ("data1", "data2"),
                                                 ("data1", "data2");

Vous pouvez également en savoir plus sur la vitesse d'insertion dans la MySQL Docs . Il décrit clairement ce qui suit.

Bien sûr, ne les combinez pas TOUS, si le montant est ÉNORME. Supposons que vous ayez 1000 lignes à insérer, ne le faites pas une à la fois. Mais vous ne devriez probablement pas essayer d'avoir toutes les 1000 lignes dans une seule requête. Au lieu de cela, divisez-le en plus petites tailles.

S'il est toujours très lent, c'est peut-être simplement parce que votre serveur est lent.

Notez que vous n'avez bien sûr pas besoin de tous ces espaces dans la requête combinée, c'est simplement pour avoir un meilleur aperçu de la réponse.