|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : février 2005 Messages : 14 ![]() |
Bonjour,
En partant d'une requête qui s'execute en 4s (je ne l'affiche pas , car elle est grosse) , et en lui rajoutant des contraintes supplémentaires dans les clauses de jointure , celle-ci met du coup un temps infini ... (j'ai attendu 2 min , elle n'était tjs pas fini). Pour résumer , au départ j'ai une requête du style : SELECT * FROM table AS a JOIN table AS b ON a.f1 = b.f1 Je rajoute une contrainte : SELECT * FROM table AS a JOIN table AS b ON a.f1 = b.f1 AND a.f2 = b.f2 cette dernière déconne complet, comment est-ce possible ? Notez , qu'il s'agit d'une jointure sur elle-même ... |
|
|
00
|
|
|
#2 |
|
Invité de passage
![]() Inscription : février 2005 Messages : 14 ![]() |
Pour apporter quelques précisions ...
Cette table contient : - 100 champs - Une clée primaire sur 7 champs (c'est pas moi Pour résumer , au départ j'ai une requête du style : SELECT * FROM table AS a JOIN table AS b ON a.pk1 = b.pk1 AND a.pk2 = b.pk2 AND a.pk3 = b.pk3 AND a.pk4 = b.pk4 AND a.pk5 = b.pk5 En rajoutant une contrainte sur un champ supplémentaire de la clée primaire , le temps d'éxecution explose ... Y'a quelque chose qui m'échappe |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Inscription : janvier 2005 Messages : 336 ![]() |
Bonjour
a part la clé primaire ta table possède t'elle un index, si non en crée un qui va bien, si oui vérifie avec l'explain plan pour voir si celui si est utilisé KrysKool. |
|
|
00
|
|
|
#4 | ||||
|
Invité de passage
![]() Inscription : février 2005 Messages : 14 ![]() |
Merci,
J'ai fait l'explain des 2 requêtes , et effectivemment elles n'ont rien a voir l'une avec l'autre. Mais j'ai beaucoup de mal à m'y retrouver Ce que je peux dire , c'est que bgp_agent_prenom bgp_agent_nom bgp_agent_mois bgp_agent_numero_homonyme bgp_agent_site Font partis de la clée primaire et donc un index multiple existe sur ces champs. Dans la premiere requête marche , elle fait un hash join ????, alors que dès que je rajoute bgp_agent_numero_homonyme dans la condition de jointure , il n'y a plus de Hash join , tout est fait dans le join filter .... Une idée ? Code :
Code :
|
||||
|
|
00
|
|
|
#5 | ||||
|
Invité de passage
![]() Inscription : février 2005 Messages : 14 ![]() |
Bon en rajoutant un index unique sur les 7 champs de la clée primaire.
Et en rajoutant bgp_agent_numero_homonyme dans la condition de jointure j'obtiens le même genre d'explain que la première requête. Code :
Il recommence le même délire qu'avant le rajout de l'index unique Code :
|
||||
|
|
00
|
|
|
#6 |
|
Futur Membre du Club
![]() Inscription : juillet 2004 Messages : 13 ![]() |
Bonjour,
Sans regarder en détail ta requête, les index ne sont utilisés sous PostgreSQL que lorsque tous les champs qui les composent sont inclus dans la requête. Après chaque création ou modification d'index il faut réaliser un ANALYZE pour que le planificateur mette à jour ses statistiques. D'autre part, peut-être serait-il préférable d'utiliser une syntaxe du type INNER JOIN pour éviter des ambiguités, ou regarder tout simplement avec des clauses WHERE ce que ça donne. Ceci dit, je pense quand même que ton problème vient de la constitution des index. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com