Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
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 06/07/2005, 15h51   #1
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
Par défaut optimisation d'une requête avec jointure

Bonjour à tous.

J'ai fait un explain sur une requête sous Oracle et sous Postgre (la même traduite suivant que j'utilise Oracle ou PostgreSQL) que je vous donne (version Postgre):
Code :
1
2
3
4
5
6
SELECT count(*) FROM 
(
SELECT D."ID_DOSSIER", "NOMDOSSIER"
FROM ddc_appia."DOSSIER" D LEFT OUTER JOIN ddc_appia."DOSSIERETAT" DE ON D."ID_DOSSIER" = DE."ID_DOSSIER"
WHERE (DE."ID_ETAT" = 2 OR DE."ID_ETAT" IS NULL)
) x ;
Et là, je constate une chose bizarre. Sous Oracle, il y a l'utilisation d'un index sur dossieretat alors qu'il n'est pas utilisé sous PostgreSQL.
Je me suis dit que si il était utilisé sous Oracle et que les deux requêtes étaient identiques alors PostgreSQL devrait l'utiliser également. Non?

Je ne sais pas comment le faire pour lui faire utiliser cet index. Y a t il un moyen de le forcer à l'utiliser ou de lui rappeller qu'il existe un index qu'il pourrait accessoirement utiliser?
Merci d'avance de me répondre.
champijulie.
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2005, 17h02   #2
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
J'ai constaté un petit truc rigolo :
J'exécute cette requête sur trois bases différentes par la taille mais qui ont la même structure:
pour la plus petite base : utilisation de 2 index
pour la moyenne base : utilisation d'un seul index
pour la grosse base : aucune utilisation d'index

Alors que ce sont les mêmes tables avec les mêmes index et la même requête. Et là, j'avoue que je ne comprend pas.
les index prennent en compte la taille de la table au nuveau de données ????

Je ne sais pas quoi penser...
champijulie
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2005, 17h33   #3
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Bonjour,

pour pouvoir choisir une stratégie efficace d'exécution des requêtes utilisateurs, Postgres a besoin de stats sur les tailles (nb d'enregistrements) des tables, les indexes, etc.

Pour constituer ces stats, il faut lancer assez régulièrement la commande suivante :
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2005, 17h46   #4
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
Je viens d'en faire un mais il bloque sur une violation d'index dans la table pg_statistic du schéma pg_catalog qui est un schéma système auquel je n'ai pas touché.
Je ne sais pas quoi faire pour remédier à cette erreur. Il me marque:
ERROR: duplicate key violates unique constraint "pg_statistic_relid_att_index"
J'essaie depuis tout à l'heure de voir d'où ça peut provenir. En efeet, il y a des doublons sur cette table par rapport à l'index mais je ne vois pas comment il aurait pu être inséré.

@+
champijulie
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2005, 17h51   #5
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Tu es sur quelle version de PostgreSQL ?
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2005, 17h53   #6
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
Version 8.0.2 pour Windows
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2005, 18h08   #7
Expert Confirmé Sénior
 
Avatar de GrandFather
 
Inscription : mai 2004
Messages : 4 490
Détails du profil
Informations personnelles :
Âge : 42

Informations forums :
Inscription : mai 2004
Messages : 4 490
Points : 5 049
Points : 5 049
Curieux...
La seule mention de ce problème que j'ai trouvée est cette URL : http://qaix.com/postgresql-database-...dex-read.shtml

Avant de faire ce que préconise Tom Lane dans sa réponse, je te conseille quand même de faire une sauvegarde complète de tes bases (on n'est jamais trop prudent)...
__________________
FAQ XML
------------
« Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
Giacomo Leopardi
GrandFather est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2005, 18h20   #8
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
J'ai suivi son conseil et le tien par la même occasion.
Ca a l'air de fonctionner mais c'est vraiment radical comme solution...

Merci beaucoup pour ton aide
@ la prochaine
champijulie
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/07/2005, 09h45   #9
Membre régulier
 
Avatar de champijulie
 
Inscription : mai 2005
Messages : 147
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 147
Points : 92
Points : 92
Ca c'est améliorer dans le sens où maintenant il utilise un peu plus les index mais c'est pas encore gagné car il ne les utilise pas tous et je ne sais pas comment le forcer à les utiliser...

Merci de me répondre
champijulie.
champijulie est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h59.


 
 
 
 
Partenaires

Hébergement Web