exécuter ces lignes de commandes prennent beaucoup de temps quand on en a 5000 à faire:
db1 eval {INSERT INTO t1 VALUES(1,‘hello’)}
db1 eval {INSERT INTO t1 VALUES(2,‘goodbye’)}
db1 eval {INSERT INTO t1 VALUES(3,‘howdy!’)}
Existe t il un moyen d’envoyer une commande avec plusieurs lignes d’un coup d’un seul?
j’ai essayé :
db1 eval {INSERT INTO t1 VALUES(1,‘hello’),(2,‘goodbye’)}
ça ne fonctionne pas
faire:
db1 eval {INSERT INTO t1 VALUES(1,‘hello’);INSERT INTO t1 VALUES(2,‘goodbye’)}
n’est pas plus rapide à exécuter
En sql simple il ne me semble pas, après si tu nous précise ta bdd cible il y a peu être moyen de trouver une astuce. Genre pour Oracle «Bulk collect & Forall» ou en SQLServer «Bulk insert»
Merci beaucoup pour ton lien. Après quelques recherches, il suffit de créer une string contenant toutes les commandes à lancer, avec juste BEGIN au debut et END à la fin:
BEGIN;
INSERT INTO table VALUES ();
INSERT INTO table VALUES ();
…
END;
Et ça marche du tonnerre (1s au lieu de 10 minutes)
Ha oui en effet il vaut mieux envoyer toutes ses requête en une seule fois … le gros point de ralentissement est souvent dans la communication inter-language/appli/serveur/…
Heureux que tu ai pu améliorer tes perfs par 600