|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 6 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
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 |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : septembre 2006 Messages : 6 ![]() |
Effectivement, je viens de fracasser la tete du dev.
Désolé pour le dérangement et le temps perdu |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com