[POSTGRESQL] explain analyze

Le
WebShaker
Salut.

j'essaye de comprendre mieux les explain analyze, mais c'est pas gagné..
j'ai trouvé un site qui tente d'ameliorer le résultat affiché

http://explain.depesz.com

n'empeche que c'est toujours pas trop clair.
Par contre ca m'a permis de voir que le plupart de requète impliquant ma
table produit ont le même problème.

voila deux de mes explain analyze

http://explain.depesz.com/s/ElG
et
http://explain.depesz.com/s/Qq

voila une des requètes.
SELECT DISTINCT product._producer FROM eproc_tarif INNER JOIN product ON
eproc_tarif.idproduct = product.idobject LEFT OUTER JOIN active ON
product.idactive = active.idactive WHERE eproc_tarif.idcatalog = 1392086
AND active.active_fr = 't' ORDER BY product._producer;

tout semble indiquer qu'une optimisation de ma jointure entre ma table
product et ma table active améliorerai le résultat, mais je n'ai pas
trouvé l'index à créer

Etienne

Dans la foulée, connaissez vous d'autre outil comme [explain.depesz.com]
qui en plus ferai des recommandations ?

Merci.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
SQLpro
Le #22587061
Si ces index n'existent pas :

eproc_tarif (idcatalog, idproduct);
product (idobject, _producer)
active (active_fr, idactive)

Créez les !

A +

Le 18/09/2010 13:00, WebShaker a écrit :
SELECT DISTINCT product._producer FROM eproc_tarif INNER JOIN product ON
eproc_tarif.idproduct = product.idobject LEFT OUTER JOIN active ON
product.idactive = active.idactive WHERE eproc_tarif.idcatalog = 1392086
AND active.active_fr = 't' ORDER BY product._producer




--
Frédéric BROUARD - expert SGBDR et SQL - MVP SQL Server - 06 11 86 40 66
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Enseignant Arts & Métiers PACA, ISEN Toulon et CESI/EXIA Aix en Provence
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
*********************** http://www.sqlspot.com *************************
helios
Le #22588871
SQLpro a écrit :
Si ces index n'existent pas :

eproc_tarif (idcatalog, idproduct);
product (idobject, _producer)
active (active_fr, idactive)

Créez les !

A +

Le 18/09/2010 13:00, WebShaker a écrit :
SELECT DISTINCT product._producer FROM eproc_tarif INNER JOIN product ON
eproc_tarif.idproduct = product.idobject LEFT OUTER JOIN active ON
product.idactive = active.idactive WHERE eproc_tarif.idcatalog = 1392086
AND active.active_fr = 't' ORDER BY product._producer






bref en resumé ce post ressemble à :

question: je veux allez vite, comment a vélo (SQL) allez plus vite car
les motos sont plus rapides (PICK) ?

reponse de notre Fred : si vous n'en avez pas pris prennez des dopants
(index)
Alain Montfranc
Le #22588891
Il se trouve que helios a formulé :
SQLpro a écrit :
Si ces index n'existent pas :

eproc_tarif (idcatalog, idproduct);
product (idobject, _producer)
active (active_fr, idactive)

Créez les !

A +

Le 18/09/2010 13:00, WebShaker a écrit :
SELECT DISTINCT product._producer FROM eproc_tarif INNER JOIN product ON
eproc_tarif.idproduct = product.idobject LEFT OUTER JOIN active ON
product.idactive = active.idactive WHERE eproc_tarif.idcatalog = 1392086
AND active.active_fr = 't' ORDER BY product._producer






bref en resumé ce post ressemble à :

question: je veux allez vite, comment a vélo (SQL) allez plus vite car les
motos sont plus rapides (PICK) ?

reponse de notre Fred : si vous n'en avez pas pris prennez des dopants
(index)



Le problème c'est qu'il a neigé et que votre moto elle va pas servir à
grand chose :-D
helios
Le #22588931
Alain Montfranc a écrit :
Il se trouve que helios a formulé :
SQLpro a écrit :
Si ces index n'existent pas :

eproc_tarif (idcatalog, idproduct);
product (idobject, _producer)
active (active_fr, idactive)

Créez les !

A +

Le 18/09/2010 13:00, WebShaker a écrit :
SELECT DISTINCT product._producer FROM eproc_tarif INNER JOIN
product ON
eproc_tarif.idproduct = product.idobject LEFT OUTER JOIN active ON
product.idactive = active.idactive WHERE eproc_tarif.idcatalog =
1392086
AND active.active_fr = 't' ORDER BY product._producer






bref en resumé ce post ressemble à :

question: je veux allez vite, comment a vélo (SQL) allez plus vite
car les motos sont plus rapides (PICK) ?

reponse de notre Fred : si vous n'en avez pas pris prennez des
dopants (index)



Le problème c'est qu'il a neigé et que votre moto elle va pas servir à
grand chose :-D




ah parce que les motos ne roulent pas dans la neige et un velo oui ?
Etienne
Le #22589591
Le 19/09/2010 18:20, SQLpro a écrit :
Si ces index n'existent pas :

eproc_tarif (idcatalog, idproduct);
product (idobject, _producer)
active (active_fr, idactive)



Merci.

Mais pour aller un peu plus loin, est ce que cela veut dire que pour
améliorer une jointure, il faut faire un index sur deux colonnes (les
deux colonnes liant les deux tables) ?

Parce que effectivement je ne créé jamais ce type d'index...
je vais essayer votre proposition et je vous tiens au courrant.

Etienne.
Etienne
Le #22589691
Le 20/09/2010 11:38, Etienne a écrit :
Le 19/09/2010 18:20, SQLpro a écrit :
Si ces index n'existent pas :

eproc_tarif (idcatalog, idproduct);
product (idobject, _producer)
active (active_fr, idactive)





Bon ben non, les indexes n'ont rien changé malheureusement...
bon apres la requete va deja vite, c'est juste qu'elle est un peu appelé
plusieurs millier de fois par jours, alors la moindre optimisation est
directement perceptible.

Etienne
Sebastien Lardiere
Le #22590821
On 18/09/2010 13:00, WebShaker wrote:
Salut.

j'essaye de comprendre mieux les explain analyze, mais c'est pas gagné..
j'ai trouvé un site qui tente d'ameliorer le résultat affiché

http://explain.depesz.com

n'empeche que c'est toujours pas trop clair.



L'idée est de voir l'arbre d'accès aux données, avec les différentes
briques utilisées en fonction de ce que l'analyseur de requetes aura
compris de la requete, ainsi que des statistiques internes à Pg sur les
données présentes ...

On pourra voir si les données d'une table sont lues depuis un SeqScan ou
un IndexScan, si une jointure se fait pas une NestedLoop ou un
MergeJoin, etc ...

En plus, on trouve des indicateurs de volume de données et de temps
passé, pour nous permettre d'identifier les problèmes.


Par contre ca m'a permis de voir que le plupart de requète impliquant ma
table produit ont le même problème.

voila deux de mes explain analyze

http://explain.depesz.com/s/ElG
et
http://explain.depesz.com/s/Qq




Là, on voit qu'il y a des SeqScan qui prennent du temps, et qui, vu le
nombre de ligne traités, pourraient être remplacé par des IndexScan.
Mais il faut trouver les bons index à créer.

--
Sébastien
Alain Montfranc
Le #22591721
helios a couché sur son écran :
Alain Montfranc a écrit :
Il se trouve que helios a formulé :
SQLpro a écrit :
Si ces index n'existent pas :

eproc_tarif (idcatalog, idproduct);
product (idobject, _producer)
active (active_fr, idactive)

Créez les !

A +

Le 18/09/2010 13:00, WebShaker a écrit :
SELECT DISTINCT product._producer FROM eproc_tarif INNER JOIN product ON
eproc_tarif.idproduct = product.idobject LEFT OUTER JOIN active ON
product.idactive = active.idactive WHERE eproc_tarif.idcatalog = 1392086
AND active.active_fr = 't' ORDER BY product._producer






bref en resumé ce post ressemble à :

question: je veux allez vite, comment a vélo (SQL) allez plus vite car les
motos sont plus rapides (PICK) ?

reponse de notre Fred : si vous n'en avez pas pris prennez des dopants
(index)



Le problème c'est qu'il a neigé et que votre moto elle va pas servir à
grand chose :-D




ah parce que les motos ne roulent pas dans la neige et un velo oui ?



Essaye...
helios
Le #22593171
Alain Montfranc a écrit :
helios a couché sur son écran :
Alain Montfranc a écrit :
Il se trouve que helios a formulé :
SQLpro a écrit :
Si ces index n'existent pas :

eproc_tarif (idcatalog, idproduct);
product (idobject, _producer)
active (active_fr, idactive)

Créez les !

A +

Le 18/09/2010 13:00, WebShaker a écrit :
SELECT DISTINCT product._producer FROM eproc_tarif INNER JOIN
product ON
eproc_tarif.idproduct = product.idobject LEFT OUTER JOIN active ON
product.idactive = active.idactive WHERE eproc_tarif.idcatalog =
1392086
AND active.active_fr = 't' ORDER BY product._producer






bref en resumé ce post ressemble à :

question: je veux allez vite, comment a vélo (SQL) allez plus vite
car les motos sont plus rapides (PICK) ?

reponse de notre Fred : si vous n'en avez pas pris prennez des
dopants (index)



Le problème c'est qu'il a neigé et que votre moto elle va pas servir
à grand chose :-D




ah parce que les motos ne roulent pas dans la neige et un velo oui ?



Essaye...




les courses moto sur les cols des Alpes se deroule dans quoi ?
helios
Le #22593251
helios a écrit :
Alain Montfranc a écrit :
helios a couché sur son écran :
Alain Montfranc a écrit :
Il se trouve que helios a formulé :
SQLpro a écrit :
Si ces index n'existent pas :

eproc_tarif (idcatalog, idproduct);
product (idobject, _producer)
active (active_fr, idactive)

Créez les !

A +

Le 18/09/2010 13:00, WebShaker a écrit :
SELECT DISTINCT product._producer FROM eproc_tarif INNER JOIN
product ON
eproc_tarif.idproduct = product.idobject LEFT OUTER JOIN active ON
product.idactive = active.idactive WHERE eproc_tarif.idcatalog =
1392086
AND active.active_fr = 't' ORDER BY product._producer






bref en resumé ce post ressemble à :

question: je veux allez vite, comment a vélo (SQL) allez plus vite
car les motos sont plus rapides (PICK) ?

reponse de notre Fred : si vous n'en avez pas pris prennez des
dopants (index)



Le problème c'est qu'il a neigé et que votre moto elle va pas
servir à grand chose :-D




ah parce que les motos ne roulent pas dans la neige et un velo oui ?



Essaye...




les courses moto sur les cols des Alpes se deroule dans quoi ?


http://motogrenoble.easyforum.fr/l-atelier-f5/comment-rouler-sur-la-neige-a-moto-t8607.htm
Publicité
Poster une réponse
Anonyme