Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL > Requêtes
Requêtes Forum d'entraide sur les requêtes SQL spécifiques à PostgreSQL, les triggers, les vues, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/12/2010, 11h32   #1
Invité régulier
 
Inscription : février 2006
Messages : 41
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 41
Points : 7
Points : 7
Par défaut [POSTGRES] UNION => baisse de performances

Bjr,

Voila, je constate une baisse de performance importante suite à l'ajout d'un UNION dans une vue.

J'ai initialement une vue de la manière suivante :
Code :
SELECT a,b,c FROM table1, table2 WHERE jointure et conditions
résultat : 150 000 enregistrements.
performance : 1~2 secondes.
Puis dans cette vue j'ajoute un UNION vers une autre table contenant les mêmes colonnes

Code :
1
2
3
SELECT a,b,c FROM table1, table2 WHERE jointure et conditions 
UNION
SELECT a,b,c FROM table3
résultat : 152 000 enregistrements.
performance : 7~8 secondes
.

Pour 2000 enregistrements de plus, présents dans la table3, je quadruple les temps de réponses!

Avez-vous déjà constaté cela? Existe-il une manipulation pour optimiser la requête?

Thanks

SGBD : Postgres 8.3 et 8.4
molarisapa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 12h23   #2
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Deja, vous pouvez utiliser JOIN pour effectuer votre jointure.

Ensuite, combien de lignes vous renvoi la deuxième requete seule (et quel temps d'exécution) ?

enfin, que donne votre requete avec un UNION ALL au lieu d'un simple UNION ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2010, 19h48   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 948
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 948
Points : 17 762
Points : 17 762
L'opérateur ensembliste UNION dédoublonne les lignes. Cette opération est compliquée par le fait que les lignes peuvent être longues.
Pour l'accélérer vous devez envisager différentes hypothèses :
Avez vous besoin du dédoublonnement ?
a) si non, alors mettez un UNION ALL
b) si oui, indexez toutes les colonnes des deux tables

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 12h33   #4
Membre régulier
 
Inscription : octobre 2009
Messages : 70
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 70
Points : 77
Points : 77
Effectivement le problème semble se trouver du côté du UNION comme dit par SQLPro.

Note que sur postgres des index supplémentaires ne te serviront à rien pour accélérer un UNION.

Je trouve tes timings relativement suspects car pour arriver à 8 secondes en dédoublonnant 150.000 lignes, les lignes doivent être énormes (avec des ints ça prend 0.2s) ou bien la requête que tu as collé n'est pas vraiment représentative de ton cas (petit cachottier).

Poste un EXPLAIN ANALYZE.
peufeu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2010, 23h45   #5
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 948
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 948
Points : 17 762
Points : 17 762
Citation:
Envoyé par peufeu Voir le message
Note que sur postgres des index supplémentaires ne te serviront à rien pour accélérer un UNION.
faux... Si les index sont couvrant, cela évite de lire la table et servira au dédoublonnage !

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2010, 17h07   #6
Membre régulier
 
Inscription : octobre 2009
Messages : 70
Détails du profil
Informations forums :
Inscription : octobre 2009
Messages : 70
Points : 77
Points : 77
Citation:
Envoyé par SQLpro Voir le message
faux... Si les index sont couvrant, cela évite de lire la table et servira au dédoublonnage !
En fait postgres ne gère pas (encore) l'utilisation d'un index seul sans toucher à la table...
peufeu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2010, 14h35   #7
Membre extrêmement actif
 
Avatar de kedare
 
Mathieu
Administrateur systèmes et réseaux
Inscription : juillet 2005
Messages : 1 476
Détails du profil
Informations personnelles :
Nom : Mathieu
Localisation : France

Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : juillet 2005
Messages : 1 476
Points : 1 260
Points : 1 260
Citation:
Envoyé par peufeu Voir le message
En fait postgres ne gère pas (encore) l'utilisation d'un index seul sans toucher à la table...
Je crois pas que ca le gère un jour, c'est pas prévu d'ajouter cette fonctionnalité car ca apporterais de trop gros inconvenants.
kedare est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h24.


 
 
 
 
Partenaires

Hébergement Web