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
Partager