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 11/09/2006, 17h52   #1
Invité de passage
 
Inscription : septembre 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 6
Points : 2
Points : 2
Par défaut PG8.1 probleme de configuration (surement)

Bonjour,

Mon problème c'est que j'ai une table, 550000 données la même requete, les même index.
Sous mysql j'ai un résultats dans la minute, sous pg au bout d'une heure la requète n'a toujours pas finie.

Voilà la table :
CREATE TABLE stats_appels4
(
id int4 NOT NULL,
cat int4 NOT NULL DEFAULT 0,
appelant varchar(20) NOT NULL DEFAULT ''::character varying,
date timestamp NOT NULL,
CONSTRAINT prim_stats_appel4_id PRIMARY KEY (id),
)

Qui contient 550 000 enregistrements.

Sur mysql 5.0 je crée la meme table avec comme index :
(cat,appelant,date)

Je fais la requete :
SELECT date_format(a.date ,'%Y-%m'),COUNT(DISTINCT(a.appelant))
FROM stats_appels AS a
WHERE a.cat = 30
AND 0 = ( SELECT COUNT(b.id)
FROM stats_appels AS b
WHERE b.cat = 30 AND MONTH( b.date ) < MONTH( a.date )
AND a.appelant = b.appelant )
AND YEAR( a.date ) = 2006 GROUP BY MONTH( a.date );

Qui a pour sémentique : Je veux le nombre de nouveaux appelant par mois.

J'ai ma réponse dans la minute.

Maintenant j'ai la même table, les même données
et l'index :
CREATE INDEX ind_sta4_cat_app ON stats_appels4 (cat,appelant,date);

Je fais la requète :
SELECT EXTRACT(MONTH FROM a.date)::integer, COUNT(DISTINCT(a.appelant))::integer
FROM public.stats_appels4 AS a
WHERE (b.cat::integer = 30)
AND 0= (SELECT COUNT(b.id)::integer
FROM stats_appels4 AS b
WHERE (a.cat::integer = 30)
AND EXTRACT(MONTH FROM b.date)::integer < EXTRACT(MONTH FROM a.date)::integer
AND b.appelant = a.appelant )
AND EXTRACT(YEAR FROM a.date )::integer = 2006
GROUP BY EXTRACT(MONTH FROM a.date )::integer;

Il me semble que c'est la même que pour mysql.

Le problème c'est que sur postgresql sur la meme machine au bout d'une heure je n'ai toujours pas les résultats.
Je ne comprends pas d'où ca peut venir. J'ai fais 50 analyze, vacuum analyze et toujours pareil

Le problème n'est pas la structure de la table, ni la requète(ce ne sont que des tests), le problème est que je n'arrive pas a obtenir de résultats sur postgresql.
J'ai du foirer un truc dans la configuration mais je vois pas quoi

Ps: je suis sous debian sid et postgresql 8.1
lanve est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2006, 20h33   #2
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,

les deux requêtes ne sont pas équivalentes, dans la requête Postgres tu as interverti deux alias dans les lignes 'WHERE a.cat = 30' et 'WHERE b.cat = 30', ce qui n'est pas du tout la même chose, ça doit sans doute donner un produit cartésien quelque part...

D'autre part, il n'est pas nécessaire d'utiliser tous ces CAST.
__________________
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 12/09/2006, 11h50   #3
Invité de passage
 
Inscription : septembre 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 6
Points : 2
Points : 2
Effectivement, je viens de fracasser la tete du dev.

Désolé pour le dérangement et le temps perdu
lanve 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 16h52.


 
 
 
 
Partenaires

Hébergement Web