PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 08/08/2011 15:43:42

cafu3
Membre

Optimisation requête ?

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

#2 08/08/2011 15:53:41

gleu
Administrateur

Re : Optimisation requête ?

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

#3 08/08/2011 16:11:20

cafu3
Membre

Re : Optimisation requête ?

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

#4 08/08/2011 17:02:49

gleu
Administrateur

Re : Optimisation requête ?

Pas mal, cette réponse, qui ne répond à aucune des questions que j'ai posé smile

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

#5 08/08/2011 21:45:27

cafu3
Membre

Re : Optimisation requête ?

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

#6 09/08/2011 00:20:46

gleu
Administrateur

Re : Optimisation requête ?

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

#7 09/08/2011 13:40:02

cafu3
Membre

Re : Optimisation requête ?

OK merci de votre réponse.

Je vais voir si je peux diminuer le nombre de requêtes.

Hors ligne

Pied de page des forums