Bonjour,
J'ai environ 12000 lignes à insérer dans mysql mais ça peut être un nombre bien plus grand.
Actuellement, je fais un mysql_query par ligne donc ça fait 12000 mysql_query : ça fonctionne.
Je voudrais pouvoir améliorer les performances de mon script et essayer de faire moins de mysql_query pour voir si ça influe sur le temps que ça prend ou non. Mon idée est donc de grouper 5000 INSERT dans une variable $bigQuery et de faire un mysql_query quand le groupe est formé. Pour 12000 lignes, ça me ferait plus que 3 mysql_query, MySQL faisant le reste du boulot.
Pour faire cela, je procède comme suit :$_CONFIG['max_queries'] vaut 5000. Si je fais cela, ça me sort
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 $limit=0; for($i=0; $i <= count($newCache); $i++) { // reached the limit or no more entries ? if($limit >= $_CONFIG['max_queries'] || $i == count($newCache)) { echo $bigQuery; mysql_query($bigQuery) or die("Query not good " . mysql_error()); $bigQuery = NULL; $limit=0; } $bigQuery .= "INSERT INTO backup (path, md5sum, date) VALUES (\"" . $newCache[$i]['path'] . "\", \"" . $newCache[$i]['md5sum'] . "\", \"" . $newCache[$i]['date'] . "\"); "; $limit++; }En affichant le contenu de $bigQuery, j'ai ça :You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '; INSERT INTO backup (path, md5sum, date) VALUES ("/var/www/153to156.diff", "4d6' at line 1je ne vois pas où est l'erreur. Pire encore, si je mets toutes les requêtes dans un fichier et que je l'importe directement dans mysql : ça marche
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 INSERT INTO backup (path, md5sum, date) VALUES ("/var/www/.htaccess", "bd429995aaded1ae1001be9d40189e21", "1220709777"); INSERT INTO backup (path, md5sum, date) VALUES ("/var/www/153to156.diff", "4d6543b8cc73cf650587c8e9ea4e7e5a", "1220709777"); INSERT INTO backup (path, md5sum, date) VALUES ("/var/www/CHANGELOG.php", "2b1df1667f3a17409227c54a0fafb46b", "1220709777"); ... encore 4997 INSERT ...(logique !). De même si j'importe dans phpmyadmin. J'ai essayé de mettre moins de requêtes d'un coup (seulement 1000) et ça ne fonctionne toujours pas. N'ayant pas accès à la fonction system, je ne peux pas utiliser de fichier sql : tout doit se faire tout seul sans que j'ai à intervenir.
D'où peut venir le problème ? Si ça n'apporte rien en terme de performances, je resterai avec les 12000 mysql_query
![]()
Partager