[PHP/MySQL] Optimisation multiples requêtes
3 messages
• Page 1 sur 1
- RomsIW
- WRInaute passionné

- Messages: 1126
- Inscription: 25 Mai 2004
[PHP/MySQL] Optimisation multiples requêtes
Bonjour,
voilà l'idée, je récupère de nombreuses infos dans de nombreuses tables et je fais pas mal de traitements qui impliquent PHP, puis je compile le tout dans une table à part que je dois vider puis re-remplir avec les informations mises à jour. Ce toutes les heures.
Le processus actuel :
1. Grosse requête
2. Traitements PHP
3. Vidage table
4. Boucle while avec inserts MySQL
Questions :
A. Vaut-il mieux faire 3. Préparer une unique requête étendue (INSERT INTO champs VALUES (ligne1),(ligne2),...) puis 4. vidage table puis 5. exécution requête unique OU faire comme actuellement + de 1000 requêtes dans une boucle ?
B. Voyez-vous un autre moyen de faire cela ? les traitements PHP ne peuvent être faits directement dans la requête..
C. Une unique requête étendue semble poser des problèmes visiblement puisque PMA propose d'office de la scinder en 14 plus petites requêtes, qu'en est-il vraiment ?
Merci de votre aide,
voilà l'idée, je récupère de nombreuses infos dans de nombreuses tables et je fais pas mal de traitements qui impliquent PHP, puis je compile le tout dans une table à part que je dois vider puis re-remplir avec les informations mises à jour. Ce toutes les heures.
Le processus actuel :
1. Grosse requête
2. Traitements PHP
3. Vidage table
4. Boucle while avec inserts MySQL
Questions :
A. Vaut-il mieux faire 3. Préparer une unique requête étendue (INSERT INTO champs VALUES (ligne1),(ligne2),...) puis 4. vidage table puis 5. exécution requête unique OU faire comme actuellement + de 1000 requêtes dans une boucle ?
B. Voyez-vous un autre moyen de faire cela ? les traitements PHP ne peuvent être faits directement dans la requête..
C. Une unique requête étendue semble poser des problèmes visiblement puisque PMA propose d'office de la scinder en 14 plus petites requêtes, qu'en est-il vraiment ?
Merci de votre aide,
-

Bool - WRInaute passionné

- Messages: 1290
- Inscription: 26 Fév 2004
Hello,
A. une seule "grosse" requête est souvent plus rapide oui (un seul verrou, une seule mise à jour des indexes, etc).
Toutefois la requête est limitée en taille, à 1Mo ou 16Mo dans les configurations les plus courantes. Tu peux évidement ajuster cette valeur si tu as un serveur dédié, mais dans tout les cas ne pas oublier que le temps de construire la requête elle est en mémoire coté PHP... donc se contenter de 1Mo me semble déjà bien.
Pour cela regroupe par "paquets" de 10, 100, ou 1000 selon la taille de chaque "ligne".
Une autre solution serait sans doute d'utiliser les transactions.
B. T'es vraiment certain de ne pas pouvoir faire tout via MySQL ?
C. bah... voir réponse A.
A. une seule "grosse" requête est souvent plus rapide oui (un seul verrou, une seule mise à jour des indexes, etc).
Toutefois la requête est limitée en taille, à 1Mo ou 16Mo dans les configurations les plus courantes. Tu peux évidement ajuster cette valeur si tu as un serveur dédié, mais dans tout les cas ne pas oublier que le temps de construire la requête elle est en mémoire coté PHP... donc se contenter de 1Mo me semble déjà bien.
Pour cela regroupe par "paquets" de 10, 100, ou 1000 selon la taille de chaque "ligne".
Une autre solution serait sans doute d'utiliser les transactions.
B. T'es vraiment certain de ne pas pouvoir faire tout via MySQL ?
C. bah... voir réponse A.
-

2dm - WRInaute discret

- Messages: 205
- Inscription: 3 Sep 2002
Idem que bool
Sauf que là :
- on ne sait pas ce que fait ton programme (log/stat/monitoring, ... ?)
- on ne sait pas ce qui est bloquant
- on ne sait pas ce que tu veux optimiser (ton archi, ton temps de traitement, ...)
Si tu fais des opérations complexes sur les données, peut-être que tu dois envisager une étape supplémentaire. Par exemple tu pourrais compiler des sous-analyses sur une période réduite (tous les 5 minutes). Ainsi lorsque tu ferais ta maj toutes les heures, tu n'aurais qu'à agréger les résultats précédents.
Sauf que là :
- on ne sait pas ce que fait ton programme (log/stat/monitoring, ... ?)
- on ne sait pas ce qui est bloquant
- on ne sait pas ce que tu veux optimiser (ton archi, ton temps de traitement, ...)
Si tu fais des opérations complexes sur les données, peut-être que tu dois envisager une étape supplémentaire. Par exemple tu pourrais compiler des sous-analyses sur une période réduite (tous les 5 minutes). Ainsi lorsque tu ferais ta maj toutes les heures, tu n'aurais qu'à agréger les résultats précédents.
3 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- Optimisation requetes MySQL
- Mysql optimisation index/requêtes.
- MySQL : optimisation des requêtes sql
- [PHP] : compter le nombre de requêtes MySQL
- Optimisation php/mysql
- [PHP MYSQL] Synchronisation des requêtes
- Trier un array et catégoriser les infos (ou requêtes multiples ?)
- MySQL, jointures multiples, WHERE et psychiatrie
- optimisation de temps de reponse des requetes sql
- Requêtes MySQL programmées à XXhXX
- InfoSpace signe un contrat avec Google - 04-09-2002
- Gestion des langues et des sessions en PHP / MySQL - 02-05-2004
- Nombre moyen de mots par requête : statistiques AOL Août 2006 - 10-08-2006
- Google rachète Widevine (optimisation vidéo et DRM) - 13-12-2010
- Explications sur le Crawl Caching Proxy de Google - 26-04-2006
- Passage à l'heure d'été/hiver sur un forum phpBB - 31-10-2010
- Optimiser le nombre de mots dans les textes de liens - 03-10-2005
- Nuage de tags Wordle pour WebRankInfo - 29-04-2009
Consultez la description détaillée des produits ou services de Google suivants : Google Trends Recherche Personnalisée
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités
