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 15/02/2018 10:47:21

HadanMarv
Membre

[SQL] Question algo de requête

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

#2 15/02/2018 14:57:57

HadanMarv
Membre

Re : [SQL] Question algo de requête

C'est si complexe que çà ? ou j'ai super mal expliqué mon problème ?

Hors ligne

#3 15/02/2018 17:33:45

dverite
Membre

Re : [SQL] Question algo de requête

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)

Hors ligne

#4 16/02/2018 15:56:18

HadanMarv
Membre

Re : [SQL] Question algo de requête

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

#5 16/02/2018 16:02:44

comaco
Membre

Re : [SQL] Question algo de requête

Y a-t-il des index ?

Hors ligne

#6 16/02/2018 16:09:11

ruizsebastien
Membre

Re : [SQL] Question algo de requête

quel est le plan d'exécution de la requête update ?


Cordialement,

Sébastien.

Hors ligne

#7 16/02/2018 16:28:49

HadanMarv
Membre

Re : [SQL] Question algo de requête

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

#8 19/02/2018 18:02:09

dverite
Membre

Re : [SQL] Question algo de requête

On pourrait expliquer pourquoi c'est lent en regardant le EXPLAIN ANALYZE de la requête.

Hors ligne

Pied de page des forums