IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PostgreSQL Discussion :

comment optimiser cette requete Postgres?


Sujet :

PostgreSQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 7
    Points : 6
    Points
    6
    Par défaut comment optimiser cette requete Postgres?
    Bonjour,
    Je vous soumet ce problème de performance auquel je suis confronté sous Postgres sur une très grosse base.
    J'ai une table de capteurs (près de 500 000 capteurs) qui enregistrent une valeur certains jours. Je veux trouver "les plus proches voisins" de chaque capteur, pas en terme de distance mais en terme de valeurs. Je calcule donc l'écart moyen entre chaque capteur pour un même jour (sur un an)... en 2 étapes...
    Mes performances sont très mauvaises, particulièrement lors de la 1ere étape où je fais un produit cartésien sur ma table capteurs (plus de 150 millions de lignes) que j'appelle dans une boucle (i):


    Code :
    SELECT capteurs.date, capteurs.capteur_id, capteurs.valeur, c2.capteur_id AS capteurs_id2, c2.valeur AS valeur2
    FROM capteurs
    JOIN capteurs c2 ON capteurs.date = c2.date
    WHERE capteurs.capteur_id = i;

    Résultat:
    date | capteur_id | valeur | capteur_id2 | valeur2
    --------------------------------------------------
    01/01| 1 | 10| 2 | 09
    02/01| 1 | 09 | 3 | 09
    03/01| 1 | 07 | 4 | 08
    etc...
    Cette première étape m'affiche les données d'un capteur,avec les valeurs de tous les capteurs qui ont enregistré une mesure à la même date.

    Sous Postgres, pour traiter 1 capteur, il faut près de 30 min ...
    Comment optimiser ce traitement (j'ai mis un index sur capteur_id) ?
    Lors de l'étape 2 j'utilise la table temporaire générée en 1 pour calculer les capteurs les plus "proches".

    Merci de votre aide précieuse.

  2. #2
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Bonjour,
    tout d'abord pour tes prochains post, .


    Ensuite pour ta requete et pour comprendre pourquoi elle prend autant de temps, lance un explain :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    explain SELECT capteurs.date, capteurs.capteur_id, capteurs.valeur, c2.capteur_id AS capteurs_id2, c2.valeur AS valeur2
    FROM capteurs
    JOIN capteurs c2 ON capteurs.date = c2.date
    WHERE capteurs.capteur_id = i;
    Et poste le résultat ici.

Discussions similaires

  1. [SQL]Comment optimiser cette requete?
    Par neeux dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/12/2008, 09h21
  2. Comment optimiser une Requete avec Count ?
    Par tavarlindar dans le forum Requêtes
    Réponses: 15
    Dernier message: 09/02/2007, 22h19
  3. Listing / Comment optimiser cette base de donnée
    Par ds-network dans le forum Requêtes
    Réponses: 3
    Dernier message: 05/02/2007, 10h08
  4. comment effectuer cette requete
    Par gforce dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/11/2006, 16h49
  5. AIdez moi à optimiser cette requete MySQL SVP
    Par petozak dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/09/2005, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo