Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
J'ai un script php avec plusieurs requêtes qui est trop long à l'exécution. Je me demande si je n'ai pas de l'optimisation à faire dans une requête qui est éxécuté plus de 3000 fois
TABLE TABX : plusieurs colonnes avec clé primaire sur COLX1 et index sur COLX2
TABLE TABY : plusieurs colonnes avec clé primaire sur COLY1 et COLY2 et clé étrangère sur COLY1 qui référence TABX.COLX1
SELECT count(*)
FROM TABY, TABX
WHERE TABY.COLY1=TABX.COLX1 AND TABX.COLX2 <='$date' AND TABY.COLY2='".$id."'"
Quand pensez-vous ?
Merci d'avance
Hors ligne
Il est possible qu'il y ait besoin de l'optimiser. Rien ne permet de l'affirmer (ou de l'infirmer) avec le peu d'informations fournies.
Quelle est la durée max et moyenne de l'exécution de cette requête ? Quelle est la durée d'exécution cumulée des requêtes ? Utilisez-vous une préparation de la requête ou exécutez-vous la requête complètement à chaque fois ? etc.
Guillaume.
Hors ligne
Requête1 "ultra simple"
Boucle sur les 377 résultats
Requête 2 "ultra simple"
Boucle sur les n résultats (une dizaine à chaque fois)
Requête4 (décrite plus haut)
Requête5 (structure "idem" requête 4)
Fin Boucle
Fin Boucle
La requête4 décrite dans mon premier message s'éxécute 5000 fois en fait (la requête 5 aussi)
Ce bout de script prend 17 secondes.
Dernière modification par cafu3 (08/08/2011 16:11:42)
Hors ligne
Pas mal, cette réponse, qui ne répond à aucune des questions que j'ai posé
Par contre, au vu de votre pseudo-code, juste un conseil, essayez au maximum d'éviter des tas de petites requêtes. Avec PostgreSQL, il vaut mieux une grosse requête que plusieurs petites.
Guillaume.
Hors ligne
Voici les réponses à vos questions :
Donc la requête 4 s’exécute 5241 fois pour une durée totale de 9,89s soit une moyenne de 0,0019s
En détail 5000 requêtes font moins de 0,0025s et quelques requêtes ont des durée élevées (... 0,0113s, 0,0117s, 0,0127s, 0,0138s)
Donc la requête 5 s’exécute 5241 fois pour une durée totale de 4,99s soit une moyenne de 0,0009s
Hors ligne
Autrement dit, la moyenne de la durée d'exécution des requêtes type 4 se trouve à 2 ms. Difficile de faire mieux. Quelques requêtes (241) sont au-dessus mais de peu (la pire semblant être à 14ms). Même si on diminuait la durée d'exécution de ces requêtes pour arriver à la moyenne des 5000 autres, on gagnerait très peu (dans les 300ms).
C'est encore pire pour la requête 5 qui s'exécute en moyenne en 0.9ms.
Bref, autrement dit, vous ne pourrez pas améliorer de façon intéressante la durée d'exécution des requêtes. Donc je ne vois qu'une solution : diminuer le nombre de requêtes. Par exemple, iIl serait intéressant de combiner la requête 4 avec la requête 5. Si c'est possible évidemment. Il est peut-être possible d'aller plus loin en combinant en plus la requête 2. Etc.
Guillaume.
Hors ligne
OK merci de votre réponse.
Je vais voir si je peux diminuer le nombre de requêtes.
Hors ligne
Pages : 1