Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[POSTGRESQL] explain analyze

16 réponses
Avatar
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.

10 réponses

1 2
Avatar
SQLpro
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 *************************
Avatar
helios
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)
Avatar
Alain Montfranc
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
Avatar
helios
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 ?
Avatar
Etienne
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.
Avatar
Etienne
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
Avatar
Sebastien Lardiere
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
Avatar
Alain Montfranc
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...
Avatar
helios
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 ?
Avatar
helios
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
1 2