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

remplir rapidement un MySQL avec une grande série de lignes

En règle générale, vous pouvez utiliser une ou plusieurs des options suivantes :

  • Démarrer une transaction, faire des insertions, valider
  • Regrouper plusieurs valeurs dans une seule insertion dans la requête
  • Supprimez toutes les contraintes avant de faire l'insertion et rétablissez les contraintes après l'insertion en masse (sauf éventuellement la clé primaire, mais pas très sûr à ce sujet)
  • Utilisez insert into ... select si approprié

Le premier (en utilisant des transactions) est le plus susceptible d'aider, mais je ne sais pas si cela fonctionne sur les tables myisam, avec innodb il fait un très bon travail - je n'utilise que ceux quand je suis obligé d'utiliser mysql, je préfère postgresql .

Dans votre cas spécifique, en insérant 100 000 lignes de données, vous pouvez procéder comme suit :

INSERT INTO status(id, responseCode, lastUpdate) SELECT @row := @row + 1 as row, 503, NOW() FROM 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t,
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t2, 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t3, 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t4, 
(select 0 union all select 1 union all select 2 union all select 3 union all select 4 union all select 5 union all select 6 union all select 7 union all select 8 union all select 9) t5, 
(SELECT @row:=0) t6;

Testé ceci sur ma machine, j'ai :

Query OK, 100000 rows affected (0.70 sec)
Records: 100000  Duplicates: 0  Warnings: 0

Je suis presque sûr que vous ne pouvez pas aller beaucoup plus vite que cela pour 100 000 lignes.