Vous n'êtes pas identifié(e).
Pages : 1
Bonjour à tous,
Voici un cas que je n'arrive pas à résoudre facilement que je vous expose ici :
J'ai une première table qui contient la liste des factures par client.
J'ai une autre table qui contient la liste des commandes par client.
Mais bien sûre je n'ai pas de lien direct entre les deux du style une facture est lié à une commande.
Je veux intégrer l'id de la commande de la facture, j'ai donc modifié les tables en conséquences et maintenant je veux faire la reprise de données.
Je récupère toutes les factures pour un client, et ensuite je voudrais trouver dans la liste des commandes celle qui par date devrait correspondre (c'est un peu hasardeux mais bon).
Et là je bloque les temps de réponse sont horribles étant donnée les volumes de données à traiter.
select date_facture, client from facture
ensuite je fais :
select max(id) from commande where date_commande <= date_facture and client = client
J'ai donc mon id de commande.
Par contre je souhaiterai l'écrire en une seule requête histoire de gagner du temps car j'ai des millions d'enregistrements à traiter
D'avance merci de votre retour
HadanMarv
Hors ligne
C'est si complexe que çà ? ou j'ai super mal expliqué mon problème ?
Hors ligne
je pense que vous voulez un UPDATE corrélé qui ressemblerait à ça:
UPDATE facture SET commande_id = (select max(id) from commande
where commande.client = facture.client
and commande.date <= facture.date)
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
Bonjour,
Tout d'abord merci de votre retour.
Malheureusement les temps de réponse sont horribles environ 4 min pour 10000 enregistrements de factures.
Personne n'aurait une autre idée ?
Hors ligne
Y a-t-il des index ?
Hors ligne
quel est le plan d'exécution de la requête update ?
Cordialement,
Sébastien.
Hors ligne
Oui j'ai positionné des index sur la table facture et sur la table commande sur les deux champs en question séparément et groupés pour tester mais sans différence notable
Au commencement je voulais juste faire un select pour valider mes traitements, j'ai maintenant alimenter le nouveau champ mais les temps d’exécution sont très longs.
environ 16 secondes pour 100 facture, passant à 4min 30 pour 1000.
Les plans d'exécution montre chaque fois que les index non combinés sont utilisés (ce qui me parait cohérent).
Hors ligne
On pourrait expliquer pourquoi c'est lent en regardant le EXPLAIN ANALYZE de la requête.
@DanielVerite
http://blog-postgresql.verite.pro/
Hors ligne
Pages : 1