|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : février 2006 Messages : 41 ![]() |
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.Puis dans cette vue j'ajoute un UNION vers une autre table contenant les mêmes colonnes Code :
résultat : 152 000 enregistrements.. 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 |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
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 ? |
|
|
00
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 948 ![]() |
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 * * * * * |
|
00
|
|
|
#4 |
|
Membre régulier
![]() Inscription : octobre 2009 Messages : 70 ![]() |
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. |
|
|
00
|
|
|
#5 | |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 948 ![]() |
Citation:
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 * * * * * |
|
|
00
|
|
|
#6 |
|
Membre régulier
![]() Inscription : octobre 2009 Messages : 70 ![]() |
|
|
|
00
|
|
|
#7 |
|
Membre extrêmement actif
![]() ![]() Mathieu Administrateur systèmes et réseaux Inscription : juillet 2005 Messages : 1 476 ![]() |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com