PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 18/02/2015 11:50:58

adelinesc2
Membre

Requête PostgreSQL lente

Bonjour à tous,

J'ai une table sous PostgreSQL : temp avec 4 colonnes (id int, campaign character varying, sender character varying, date_s date) de près de 9 millions lignes. Et c'est une table sans index.

Le souci intervient à  chaque fois que j'essaie d'exécuter cette requête :

SELECT COUNT(*) FROM temp WHERE id = $idmail and campaign = '$variable_campaign' AND date > '$date_c' " dans une boucle de 100K

Je n'ai toujours pas obtenu de réponses (depuis 20/30 minutes). (Comme j'ai mis un set_time_limit illimité en PHP sinon j'aurai obtenu 500 error en 5 minutes)

En fait le but de toutes ces requêtes c'est de récupérer une liste de mails auxquels la campagne n'a pas été envoyé cette semaine.

Avez-vous des pistes svp, je me retrouve un peu bloquée.

J'avais aussi en tête si jamais je ne pourrai pas exécuter des requêtes sur une table de 9M de faire une sorte de système de fichiers temporaires mais je trouvais plus propre de le faire avec une base de données...

Merci pour vos réponses !

Hors ligne

#2 18/02/2015 14:10:53

rjuju
Administrateur

Re : Requête PostgreSQL lente

Bonjour,

le temps d'exécution semble un peu exagéré. Avez-vous regardé si la requête n'était pas bloquée ? (colonne waiting de la vue pg_stat_activity par exemple). Sinon, à vue de nez un index sur les colonnes id,campaign et date_s pourrait aider.

Hors ligne

#3 19/02/2015 13:08:52

adelinesc2
Membre

Re : Requête PostgreSQL lente

Merci pour votre réponse finalement je n'ai utilisé qu'une seule requête au lieu de 100K requête pour obtenir ce que je voulais smile

Requête transformée :

 "SELECT id_mail FROM temp t RIGHT JOIN mail m ON t.id_mail = m.m_id WHERE t.campagne != '$autrecampagne' AND t.date_envoi > '$date_c'" 

Hors ligne

Pied de page des forums